1

Ich habe eine Konsolenanwendung, wo ich versuche, mit log4net Windows-Ereignisprotokoll mit EventLogAppender zu protokollieren. Ich habe auch zwei RollingFileAppender s, aber diese funktionieren ordnungsgemäß.Log4net EventLogAppender funktioniert nur im Root-Logger, warum?

Die RollingFileAppender s sind im Stammlogger, wie diese konfiguriert:

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingFileAppenderInfo" />  
    <appender-ref ref="RollingFileAppenderDebug" /> 
</root> 

Die EventLogAppender s sind in einem Logger EventLogger genannt, wie folgt konfiguriert:

<logger Name="EventLogger"> 
    <level value="INFO" /> 
    <appender-ref ref="EventLogAppenderInfo"/> 
    <appender-ref ref="EventLogAppenderError"/> 
</logger> 

diese Weise werden die EventLogger inherits die Appender von der Wurzel. Wenn ich etwas mit EventLogger logge, wird es auch in die Protokolldateien geschrieben. Der Grund warum ich es so gemacht habe, weil ich nicht das Windows Event Log mit allen Infoeinträgen spammen will, nur die wichtigen. Aber ich möchte auch jeden Fehler protokollieren. Diese

ist, wie ich den Logger erhalten:

private static readonly log4net.ILog eventLog = log4net.LogManager.GetLogger("EventLogger"); 

Das Problem

wie folgt konfiguriert, das eventlog Objekt mit so etwas in jeder Ebene zu protokollieren, log4net schreibt nicht in die Windows Event Log, aber es schreibt in die Log-Dateien, so dass die Appender im root funktionieren.

Wenn ich die EventLogAppender s zum root, sie arbeiten, aber sie protokollieren auch Einträge der INFO-Ebene, die ich nicht in das Ereignisprotokoll protokollieren möchte.

Ich glaube nicht, dass dies ein Genehmigungsproblem wäre, die Quelle ist bereits erstellt und zugänglich.

Hier sind die beiden EventLogAppender s, wenn jemand neugierig ist:

<appender name="EventLogAppenderInfo" type="log4net.Appender.EventLogAppender"> 
    <applicationName value="ApplicationName" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date{yyyy.MM.dd HH:mm:ss} [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
    <levelToMatch value="INFO"/> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
</appender> 

<appender name="EventLogAppenderError" type="log4net.Appender.EventLogAppender"> 
    <applicationName value="ApplicationName" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <IgnoresException value="False"/> 
    <conversionPattern value="%date{yyyy.MM.dd HH:mm:ss} [%thread] %-5level %logger [%property{NDC}] - %message%newline%exception" /> 
    </layout> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMin value="WARN" /> 
    <levelMax value="FATAL" /> 
    </filter> 
</appender> 

ich an nichts denken kann, warum log4net dies zu tun, wenn jemand eine Lösung hat, wäre es sehr geschätzt werden!

Prost!

Antwort

1

Ich denke, dies ist eine Groß-und Kleinschreibung.

<logger Name="EventLogger"> 

sollte

<logger name="EventLogger"> 
Verwandte Themen