J'ai créé un scénario simple à l'aide de Log4net, mais il semble que mes ajouts ne fonctionnent pas car les messages ne sont pas ajoutés au fichier journal.
J'ai ajouté ce qui suit au fichier web.config:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="D:\MyData\Desktop\LogFile.txt" />
<appendToFile value="true" />
<encoding value="utf-8" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
Dans le fichier global ASAX, j'ai ajouté:
ILog logger = LogManager.GetLogger(typeof(MvcApplication));
et dans la méthode Application_Start:
logger.Info("Starting the application...");
Qu'ai-je fait de mal?
Appelez-vous
log4net.Config.XmlConfigurator.Configure();
quelque part pour que log4net lise votre configuration? Par exemple. dans Global.asax:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
// Initialize log4net.
log4net.Config.XmlConfigurator.Configure();
}
Utilisez cette FAQ page: Questions fréquemment posées sur Apache log4net
Aux trois quarts environ, il vous explique comment activer le débogage de log4net à l'aide du traçage d'application. Cela vous indiquera où se trouve votre problème.
Les bases sont:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
</configuration>
Et vous voyez la trace dans la sortie standard
Comme @AndreasPaulsson l'a suggéré, nous devons le configurer. Je fais la configuration dans le fichier AssemblyInfo
. Je spécifie le configuration file name
ici.
// Log4Net Configuration.
[Assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Assurez-vous que le processus (compte) sous lequel le site est en cours d'exécution dispose des privilèges nécessaires pour écrire dans le répertoire de sortie.
Dans IIS 7 et les versions ultérieures, cela est configuré sur le pool d'applications et correspond normalement à AppPool Identity , qui n'aura normalement pas l'autorisation d'écrire dans tous les répertoires.
Vérifiez vos journaux d'événements (application et sécurité) pour voir si des exceptions ont été levées.
Insérer:
[Assembly: log4net.Config.XmlConfigurator(Watch = true)]
à la fin du fichier AssemblyInfo.cs
Dans mon cas, log4net ne se connectait pas correctement car il y avait un espace dans le nom de mon projet. Cela m'a rendu fou pourquoi le même code fonctionnait parfaitement dans un projet différent, mais pas dans le nouveau. Les espaces. Un espace simple.
Alors, méfiez-vous des espaces dans les noms de projets. J'ai appris ma leçon.
Pour moi, j'ai déplacé l'emplacement des fichiers journaux et ce n'est que lorsque j'ai changé le nom du fichier en quelque chose d'autre qu'il a recommencé.
Il semble que s'il existe déjà un fichier journal portant le même nom, rien ne se passe.
Ensuite, j'ai renommé l'ancien fichier et modifié le nom du fichier journal dans la configuration pour qu'il redevienne ce qu'il était.
Dans mon cas, je devais donner l'autorisation IIS_IUSRS
Read\write au fichier journal.