2015-02-05 3 views
0

두 개의 로거를 구성하고 동시에 이벤트 로그와 텍스트 파일에 기록하려고하지만 둘 다 텍스트 로깅합니다. 내 응용 프로그램에서동일한 파일에 두 개의 로거 작성

<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
     <file value="NavRiskFileImportError.log" /> 
     <appendToFile value="true" /> 
     <maximumFileSize value="100KB" /> 
     <maxSizeRollBackups value="2" /> 
     <datePattern value="yyyyMMdd" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="{%level}{%date} – %message%newline"/> 
     </layout> 
    </appender> 

    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
     <param name="ApplicationName" value="NavriskFromExcel" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
<!--loggers--> 
    <logger name="FileLogger"> 
     <level value="ALL" /> 
     <appender-ref ref="RollingFile" /> 
    </logger> 

    <logger name="EventLogger"> 
     <level value="ALL" /> 
     <appender-ref ref="EventLogAppender" /> 
    </logger> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="EventLogAppender" /> 
     <appender-ref ref="RollingFile" /> 
    </root> 
    </log4net> 

내가 가진 : 여기에 내 구성 파일입니다

private static ILog logger= LogManager.GetLogger("FileLogger"); 
private static ILog eventLogger= LogManager.GetLogger("EventLogger"); 

그러나 두 로거는 이벤트 로그 파일 아무것도에 데이터를 쓰고있다. 내가 뭘 잘못하고있어?

답변

3

당신은 그렇지 않으면 루트 로거에서 펜더 상속, 개별 로거에 additivity="false"을 지정해야합니다 :

상가는 기본적으로 true로 설정, 즉 아이들이 기본적으로 조상의 펜더을 상속입니다 . 이 변수가

(source)

사용하지 되는 다음 거짓 이 로거의 조상에있는 펜더를 설정하면 그래서 의미 : 모두가 작성하는 이유를 설명

<logger name="EventLogger" additivity="false"> 

을 파일.

그래서 남은 질문은 EventLogAppender가 작동하지 않는 이유입니다. 그 아무것도, enable log4net internal debugging을 표시하고 출력을 확인하지 않는 경우

var messages = LogManager.GetRepository().ConfigurationMessages.Cast<LogLog>(); 

if (messages.Any()) 
{ 
    string message = messages.Aggregate("Log4net Configuration Errors: " 
             + Environment.NewLine, 
      (s, log) => s + log.Message + Environment.NewLine); 
} 

을 그리고 :이 코드를 사용하여 구성 오류를 확인할 수 있습니다.

편집 : 설명서에 EventLogAppender will fail if you try to write using an event source that doesn't exist unless it is running with local administrator privileges이 표시되지만 이벤트 소스는 상승 된 프로세스 또는 installer으로 만들어야합니다. 이벤트 소스는 컴퓨터마다 한 번 만들어야합니다.

+0

감사합니다. 지금은 이벤트 로그의 아무 것도 파일에 쓰지 않고 오류가 없습니다. – Yuri

+0

내 생각에는 권한이 필요합니다. 이 웹 응용 프로그램입니까? – stuartd

+0

아니요,이 콘솔입니다. 도메인 관리자 계정으로 실행 중입니다. – Yuri

관련 문제