2016-09-15 102 views
2

我試圖定義2個獨立的appender登錄到2個文件。我爲「DebugAppender」定義了 DEBUG級別,然後爲「RelevantAppender」定義了「安全」和「ServerStats」記錄器的不同級別。如何爲每個appenders定義不同的記錄器級別

問題是這些記錄器定義覆蓋了我的「DebugAppender」級別,現在它不處於DEBUG模式(所有記錄器)。

如何使其按預期工作?

<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個不同的appender。 DebugAppender的級別由<root>定義。兩個相關的appender將兩個文件寫入具有不同日誌級別(閾值)的同一文件。重要的是,你包括鎖定模型<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />。否則,您調用的第一個appender將鎖定文件,而第二個appender不能寫入文件(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 +。

希望這會有所幫助

相關問題