Ich benutze log4net und ich versuche, einen Filter zu verwenden, so dass nur ein Appender in eine bestimmte Datei schreiben kann.log4net filter funktioniert nicht
Kann mir jemand sagen, warum das nicht funktioniert? Ich möchte nur die appender „ErrorLogFileAppender“ genannt, in die Datei zu schreiben ..
<appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="..\\WebErrors.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %logger{1} %m%n" />
</layout>
<filter type="log4net.Filter.LoggerMatchFilter">
<!-- allows this sub-namespace to be logged... -->
<loggerToMatch value="ErrorLogFileAppender" />
</filter>
</appender>
Dies ist, wie ich den Logger erhalten die in der Lage sein sollte, in die Datei zu schreiben:
private static ILog _fileLogger = LogManager.GetLogger("ErrorLogFileAppender");
Aber diese Logger (in einer anderen Klasse verwendet wird) kann auch auf die gleiche Datei schreiben, die falsch ist:
private static ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
FWIW, ich glaube, Sie‘ Dies unterscheidet sich von der Art und Weise, wie log4net mit diesem Ansatz arbeitet - Ihr Code sollte nicht wissen, dass er sich bei einem 'ErrorLogFileAppender' anmeldet, er sollte nur auf der richtigen Ebene loggen - sich Gedanken darüber machen, wo und was gerade in Ihrer Konfiguration protokolliert wird . –
Guter Gedanke. Ich werde einige Änderungen sehen. Aber mein Problem mit dem Filter ist immer noch da, obwohl – MrProgram
Oh ja, Sie werden immer noch die Filter usw. in irgendeiner Weise arbeiten müssen, wenn Sie nur Fehler von einer bestimmten Komponente protokollieren möchten. Oder richten Sie nur diesen Logger ein, um diesen Appender zu verwenden ... –