2016-08-11 41 views
1

Log4Netを使用して、アプリケーションでさまざまな種類のイベントをすべて記録しています。したがって、私はfileAppenderとsmtpAppenderを設定しました。 fileAppenderはすべてのログを記録していますが、smptAppenderはログレベルがFATALの場合にのみ電子メールを送信します。Log4Net smtpappenderがレベルフィルタを無視しています

今、Log4Netは私にERRORとFATALの両方のレベルのメールを送信しています。私の設定です

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\Temp\xxx.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <maxSizeRollBackups value="150" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <header value="DateTime | Thread | Level | ClassName | Message" /> 
     <conversionPattern value="%date | %thread | %-5level | %logger | %message%newline" /> 
    </layout> 
    </appender> 
    <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <acceptOnMatch value="true" /> 
     <levelToMatch value="FATAL" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    <to value="xxx" /> 
    <from value="xxx" /> 
    <subject value="Error" /> 
    <smtpHost value="xxx" /> 
    <bufferSize value="512" /> 
    <lossy value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date | %thread | %-5level | %logger | %message%newline" /> 
    </layout> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="FileAppender" /> 
    <appender-ref ref="SmtpAppender" /> 
    </root> 
</log4net> 

私は[1.2.15] 2.0.5を最新のlog4netのバージョンを使用しています。

奇妙なことに、smptAppenderはこの設定でINFOとDEBUGレベルをフィルタリングしています。

レベル・マッチ・フィルタの代わりにレベル・エバリュエーターまたはレベル範囲を使用することもできませんでした。

レベルの評価:

<evaluator type="log4net.Core.LevelEvaluator"> 
    <threshold value="FATAL"/> 
</evaluator> 

レベル範囲フィルタ:

<filter type="log4net.Filter.LevelRangeFilter"> 
    <param name="LevelMin" value="FATAL"/> 
    <param name="LevelMax" value="FATAL"/> 
</filter> 

私はこのトピックに関する多くのスレッドがここにStackOverflowの上があることを知っているが、それらのどれも私の問題で私を助けることができませんでした。同じ話題で

スレッド:

How do I configure a log4net SmtpAppender to only send me e-mails when a certain level is hit?

Log4j2: SMTPAppender does not send mails with error or fatal level

Log4Net LevelEvaluator Ignored when bufferSize greater than 1 for SmtpAppender

答えて

0

だけでなく、私はこの質問はかなり古いであることを知っているが、私はこの問題を持つ他の人のために、この答えを投稿。

"lossy"と "bufferSize"設定を使用しています。私は、ログが致命的なイベントに到達したときに最後の512イベント(致命的なイベントだけでなく)を取得することだと思います。

LevelMatchFilterまたはLevelEvaluatorを使用する代わりに、単純な「しきい値」(評価者ではない)で簡単にテストできますか。

詳細については、Why do Log4Net Filters Receive Messages Outside of the Evaluator Threshold?を参照してください。

しかし、私はこの場合、あなたが受け取るメールに他の出来事はないと思うので、バッファリングは役に立たないでしょう。

関連する問題