J'ai un programme qui effectue de nombreux appels log4net vers les enregistreurs "myprogram". Il appelle également d'autres codes qui font des appels log4net à d'autres loggers. Je veux capturer tous les journaux supérieurs à INFO pour "monprogramme" et tous les journaux supérieurs à WARN pour tout le reste. De cette façon, je reçois les messages de travail en cours spécifiques à la tâche sur laquelle je travaille, mais je suis toujours informé des choses potentiellement mauvaises qui se produisent dans le code de soutien. Je veux que cela soit envoyé à la fois à Console et à un fichier journal.
J'ai la configuration suivante de log4net :
<log4net>
<root>
<level value="WARN" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</root>
<logger name="myprogram">
<level value="INFO" />
<appender-ref ref="Console" />
<appender-ref ref="LogFile" />
</logger>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
<threshold value="INFO" />
</appender>
<appender name="LogFile" type="log4net.Appender.RollingFileAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="- %utcdate %level %logger %ndc %thread %message%newline" />
</layout>
<appendToFile value="false" />
<staticLogFileName value="true" />
<rollingStyle value="Once" />
<file value="mylogfile" />
<immediateFlush value="true" />
<threshold value="INFO" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
</log4net>
Cela me semble parfaitement logique : enregistrer >WARN pour tout et >INFO pour l'enregistreur spécifique "myprogram".
Le problème est que je reçois des messages INFO enregistrés. deux fois sur Console et LogFile. Cela ne se produit que si j'ai à la fois le <root>
y <logger>
Cependant, si je supprime l'un ou l'autre, l'autre fonctionne comme prévu.
Je pourrais comprendre si j'obtenais une double journalisation des entrées WARN (puisque myprogram correspond à la fois à "Root" et à "myprogram"), mais cela se produit à INFO même si Root est (vraisemblablement) défini à WARN.
Est-ce que je fais quelque chose de mal ici, ou est-ce un bug/ambiguïté de log4net ?