2017-07-21 4 views
1

Ich versuche, 2 Log-Dateien zu haben, mit meiner Anwendung Logging entweder durch Angabe eines Loggernamens im Code.Log4net - Logging auf falschen Appender

Das Problem ist, es protokolliert nie die Datei, die ich versuche, zu tarnen, stattdessen protokolliert es immer den letzten deklarierten Appender in der Konfiguration (LogB in diesem Fall).

Ich habe meine Config setzen sich wie folgt zusammen:

<log4net> 
    <logger name="LogA"> 
     <appender-ref ref="LogA"/> 
     <level value="DEBUG"/> 
    </logger> 
    <logger name="LogB"> 
     <appender-ref ref="LogB"/> 
     <level value="DEBUG"/> 
    </logger> 
    <appender name="LogA" type="log4net.Appender.FileAppender"> 
     <file value="E:\Logs\LogA.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <appender name="LogB" type="log4net.Appender.FileAppender"> 
     <file value="E:\Logs\LogB.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogA" /> 
    </root> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogB" /> 
    </root> 
    </log4net> 

Dann in meinem Code, wenn ich einen Logger erstellen:

private static readonly ILog logA = LogManager.GetLogger("LogA"); 
log.Debug("This should log to LogA"); 

Und in einer anderen Klasse:

private static readonly ILog logB = LogManager.GetLogger("LogB"); 
log.Debug("This should log to LogB"); 

Aber nichts wird jemals in der LogA-Datei protokolliert, es wird immer in die LogB-Datei ausgegeben (oder was auch immer in der Confi zuletzt erscheint) G).

Was fehlt mir?

Antwort

1

Aus irgendeinem Grund schien es nicht die mehreren Stammknoten zu mögen. Wenn ich dieses Setup stattdessen verwendete (die Appender-Knoten beibehalten), funktionierte es:

<root> 
     <level value="ALL" /> 
     <appender-ref ref="SomeRootAppender" /> 
    </root> 
    <logger additivity="false" name="LogA"> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogA" /> 
    </logger> 
    <logger additivity="false" name="LogB"> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogB" /> 
    </logger> 
Verwandte Themen