2016-09-15 24 views
2

2つの独立したアペンダを定義して2つのファイルにログインしようとしています。私は "DebugAppender"のDEBUGレベルを定義し、次に "RelevantAppender"では "Security"と "ServerStats"ロガーの異なるレベルを定義します。アペンダごとに異なるロガーレベルを定義する方法

これらのロガー定義は私の "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つの異なるアペンダーを定義します。 DebugAppenderのレベルは<root>で定義されています。関連する2つのアペンダは、両方ともログレベル(しきい値)が異なる同じファイルに書き込みます。ロックモデル<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />を含めることが重要です。それ以外の場合は最初に呼び出すアペンダーはファイルをロックし、2番目のアペンダーはファイルに書き込めません(Can Log4net have multiple appenders write to the same file?)。 <logger>では、2つの異なるアペンダーとログレベルを定義するだけです。この方法で、アペンダーの設定からレベルを取得します。

このようにすると、デバッガ+タイプのすべてのイベントがいずれのロガーからでもplastic.debug.log.txtに書き込まれます。 plastic.relevant.log.txtには、security-loggerのイベント+ serverstat-loggerのinfo +のみが書き込まれます。

希望すると便利です。

関連する問題