126 votes

log4net ne fonctionne pas

Hé, j'ai cette configuration dans mon web.config

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        <param name="File" value="mylog.log" />
        <param name="AppendToFile" value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="" />
            <param name="Footer" value="" />
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
        </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
        <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="[Header]\r\n" />
            <param name="Footer" value="[Footer]\r\n" />
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="LogFileAppender" />
        <appender-ref ref="ConsoleAppender" />
    </root>
</log4net>

mais log4net ne fonctionne pas. Mon projet se compile bien, et je n'obtiens aucune erreur de débogage non plus. Les lignes où je dis à log.debug("somemessage") s'exécute bien, mais je n'arrive pas à trouver la mylog.log alors où est-il ?

309voto

Kirk Woll Points 34601

Une astuce pour ce genre de chose est de s'assurer d'ajouter l'attribut XmlConfigurator à l'assemblage en plaçant la ligne suivante dans votre fichier de configuration AssemblyInfo.cs :

[assembly: log4net.Config.XmlConfigurator]

Sinon, log4net ne s'active jamais.

51voto

Rob Levine Points 20793

Je suppose que soit log4net n'enregistre pas du tout, soit le fichier n'aboutit pas là où vous l'attendez.

Tout d'abord, avez-vous réellement appelé

XmlConfigurator.Configure()

n'importe où dans votre code ? Si le snippet xml ci-dessus se trouve dans le fichier de configuration de l'application, cet appel fera l'affaire. Si l'extrait xml se trouve dans son propre fichier, vous devrez utiliser la fonction .Configure(string) qui prend le chemin d'accès au fichier. Sans cet appel (ou apparemment l'attribut au niveau de l'assemblage mentionné par Kirk Woll), alors log4net n'enregistrera pas du tout.

Si vous pensez que tout est fait, et que log4net devrait enregistrer, alors vous devriez peut-être mettre un chemin d'accès complet pour le fichier journal pendant que vous continuez à déboguer. Cela vous permettra d'être sûr de l'endroit où le fichier devrait être.

35voto

Amir Abiri Points 646

Il y a un autre petit problème, voir ici : http://logging.apache.org/log4net/release/manual/configuration.html#dot-config

le site [assembly: log4net.Config.XmlConfigurator] ne fonctionne pas avec app.config. Si vous configurez log4net à partir de app.config, vous devez utiliser la méthode log4net.Config.XmlConfigurator.Configure() méthode.

22voto

earthling42 Points 196

Voici ma liste de contrôle pour les cas où log4net se montre récalcitrant :

  • s'assurer que le fichier log4net.config est copié dans le dossier bin\ lors de la construction (configuré à 'Copy if newer' dans le compilateur)
    • lorsqu'il s'agit de code installé, assurez-vous que le fichier log4net.config est bien présent (défini sur 'Content' dans le compilateur).
  • s'assurer que l'utilisateur sous lequel le processus est exécuté dispose des droits d'écriture sur le dossier où les journaux doivent être écrits.
  • en cas de doute, donnez les autorisations de promiscuité à c : \temp\ et faire en sorte que tout se connecte à cet endroit ()
  • Lancez Sysinternal/Dbgview.exe pour voir si cela vous dit quelque chose.

6voto

John K Points 13695

J'ai eu des expériences où les systèmes de journalisation échouent silencieusement sans lever d'exceptions. Je suppose que cela est logique car si l'enregistreur enregistre des erreurs, comment peut-il enregistrer une erreur indiquant qu'il est incapable d'effectuer l'enregistrement ?

Donc si le fichier n'est pas créé sur le disque, commencez par examiner les permissions du système de fichiers pour s'assurer que l'utilisateur sous lequel votre application est exécutée peut écrire un nouveau fichier à cet emplacement sur le disque.

À des fins de test, vous pouvez créer manuellement le fichier sur le disque qui doit être écrit et ouvrir les permissions pour que tout le monde puisse y écrire. Si l'enregistreur commence à y écrire, vous savez que le problème est basé sur les autorisations plutôt que sur la configuration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X