web-dev-qa-db-fra.com

Log4net n'écrit pas le fichier journal

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?

149
john84

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();
}
298
Andreas Paulsson

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

45
bechbd

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)]
32
Lijo

Assurez-vous également que l’option "Copier toujours" est sélectionnée pour [log4net] .config comme ceci image:

enter image description here

27
kokabi

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.

22
Oded

Insérer:

 [Assembly: log4net.Config.XmlConfigurator(Watch = true)]

à la fin du fichier AssemblyInfo.cs

18
shay

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.

1
zanussi

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.

1
kernowcode

Dans mon cas, je devais donner l'autorisation IIS_IUSRS Read\write au fichier journal.

0
Rahatur