2017-02-13 6 views
3

RollingFileAppenderlog4net.Appender.FileAppender+MinimalLock 잠금 모델 과 함께 사용되면 파일에 아무 것도 기록하지 않는 것 같습니다. 그러나이 잠금 모델없이 appender를 사용하면 로깅이 작동합니다. 는 config 아래의 파일, Appender1 작품에서 프로그래밍 방식으로 파일 이름을 설정할 때 MinimalLock 잠금 모델이 작동하지 않음

하지만 Appender2하지 않습니다 : 여기에
<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    </configSections> 

    <log4net> 
    <appender name="Appender2" 
    type="log4net.Appender.RollingFileAppender" > 
     <file type="log4net.Util.PatternString" value="%property{LogName}" /> 
     <encoding value="utf-8" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%logger] %message%n" /> 
     </layout> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    </appender> 
    <appender name="Appender1" 
    type="log4net.Appender.RollingFileAppender" > 
     <file type="log4net.Util.PatternString" value="%property{LogName}" /> 
     <encoding value="utf-8" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message%n" /> 
     </layout> 
    </appender> 
    <logger name="myLogger" additivity="false"> 
     <level value="DEBUG" /> 
     <appender-ref ref="Appender2" /> 
    </logger> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="Appender1" /> 
    </root> 
    </log4net> 
</configuration> 

내가 테스트하고있는 샘플 코드입니다 :

static void Main(string[] args) 
{ 
    ILog logger = LogManager.GetLogger("myLogger"); 
    GlobalContext.Properties["LogName"] = "Log1.log"; // <== The log file name is getting set here. 
    log4net.Config.XmlConfigurator.Configure(new FileInfo(@"Logger.config")); 

    logger.Info("Sample log entry"); 
} 

내가 만든 또 다른 관찰은 내가 제거하는 경우이다 루트 수준 로거, 로깅이 작동하는 것 같습니다.

답변

4

난 당신이 모두 펜더에

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

을 추가 할 수 있다고 생각, 그것은 Appender1에 존재하지 않습니다. 이것은 루트 요소를 제거하는 것이 왜 효과가 있는지 설명 할 것입니다.

+0

잠금 모델이 다른 appenders를 사용할 수 있습니까? – pmohandas

+0

예.하지만 appender가 쓰는 각 파일에는 동일한 잠금 모델이 있어야합니다. – Peter