2016-09-15 4 views
2

두 개의 독립적 인 애펜더를 정의하여 2 개의 파일에 로그인하려고합니다. 나는 DebugAppender에 대해 DEBUG 레벨을 정의한 다음 "RelevantAppender"에 대해 "Security"및 "ServerStats"로거에 대해 서로 다른 레벨을 정의합니다.어펜더마다 다른 로거 레벨을 정의하는 방법

이 로거 정의가 내 "DebugAppender"레벨을 덮어 쓰고 있으며 이제는 디버그 모드 (모든 로거)에 있지 않습니다.

예상대로 작동하게하려면 어떻게해야합니까?

<log4net> 
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="plastic.debug.log.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <datePattern value=".yyyyMMdd" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %thread %property{TransactionID} %property{ClientMachine} %-5level %logger - %message%newline" /> 
    </layout> 
</appender> 

<appender name="RelevantAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="plastic.relevant.log.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <datePattern value=".yyyyMMdd" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %property{ClientMachine} %-5level %logger - %message%newline" /> 
    </layout>`enter code here`  
</appender> 


<logger name="Security"> 
    <level value="ERROR" /> 
    <appender-ref ref="RelevantAppender" /> 
</logger> 

<logger name="ServerStats"> 
    <level value="INFO" /> 
    <appender-ref ref="RelevantAppender" /> 
</logger> 

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

답변

2

당신하고 발생한 문제는 로거에서 만드는 정의는 다음의 모든 수준을 outweights 있다는 것입니다. 그래서 내 해결책은 여기에있다 :

<log4net> 
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="plastic.debug.log.txt" /> 
    <!--...--> 
</appender> 

<appender name="Security_RelevantAppender" type="log4net.Appender.RollingFileAppender"> 
    <threshold value="ERROR" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <file value="plastic.relevant.log.txt" /> 
    <!--...--> 
</appender> 

<appender name="Serverstat_RelevantAppender" type="log4net.Appender.RollingFileAppender"> 
    <threshold value="INFO" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <!--...--> 
</appender> 


<logger name="Security"> 
    <appender-ref ref="Security_RelevantAppender" /> 
</logger> 

<logger name="ServerStats"> 
    <appender-ref ref="Serverstat_RelevantAppender" /> 
</logger> 

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

3 개의 다른 애펜더를 정의한다. DebugAppender의 레벨은 <root>으로 정의됩니다. 두 개의 관련 appender는 서로 다른 로그 수준 (임계 값)을 가진 두 파일을 같은 파일에 씁니다. 잠금 모델 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />을 포함하는 것이 중요합니다. 두 번째 호출기는 파일을 잠글 것이고 두 번째 호출기는 쓸 수 없습니다 (Can Log4net have multiple appenders write to the same file?). <logger>에서는 두 개의 다른 appender와 loglevel을 정의 할뿐입니다. 이 방법은 appender 설정에서 레벨을 취할 것입니다.

이렇게하면 모든 로거에서 debug + 유형의 모든 이벤트가 plastic.debug.log.txt에 기록됩니다. plastic.relevant.log.txt에는 security-logger 및 serverstat-logger의 info + 이벤트 만 기록됩니다.

희망이 도움이되었습니다.

관련 문제