1

나는 Windows 이벤트 로그에 log4netEventLogAppender을 사용하여 로그온하려고하는 콘솔 응용 프로그램이 있습니다. 두 개의 RollingFileAppender도 있지만 제대로 작동합니다.Log4net EventLogAppender는 루트 로거에서만 작동합니다. 이유가 무엇입니까?

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

이 식으로 EventLogger 상속 :

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

EventLogAppender의는 다음과 같이 구성 EventLogger라는 로거에 있습니다

RollingFileAppender의는 다음과 같이 구성 루트 로거에 루트로부터 appenders. EventLogger으로 로그를 남기면 로그 파일에도 기록됩니다. 모든 정보 항목이 포함 된 Windows 이벤트 로그를 스팸하지 않으려 고하기 때문에 이런 식으로 해본 이유는 중요한 것입니다. 하지만 모든 오류를 기록하고 싶습니다.

이 내가 로거 얻을하는 방법입니다 : 모든 수준에 뭔가를 기록하는 eventlog 객체를 사용하여,

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

다음과 같이 구성 문제

을 log4net는 Windows에 기록하지 않습니다 이벤트 로그이지만 로그 파일에 기록하므로 root의 appender가 작동합니다.

EventLogAppender을 루트에두면 작동하지만, 이벤트 로그에 기록하지 않으려는 정보 수준 항목도 기록합니다.

권한 문제가 아니라 소스가 이미 생성되어 액세스 가능하다고 생각됩니다. 사람이 궁금하다면

여기

는 두 EventLogAppender의 위치 :

<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> 

난 아무것도 생각할 수 없다이 일을 왜 log4net, 사람이 솔루션을의 경우는 많이 주시면 감사하겠습니다!

건배!

답변

1

대소 문자를 구분하는 문제라고 생각합니다.

<logger Name="EventLogger"> 

해야

<logger name="EventLogger">