misc.log

日常茶飯事とお仕事と

log4netでログをメールに出す

とりあえずメモ。詳細は後程。

log4netはログ出力をさまざまな形で出力でき、なによりその書式、出力先を外部の設定ファイルで自在に指定できることが魅力です。で、その「出力先」の1つとして「メール」があるのですが……。自分は使ったことありませんが、出力先設定に「SmtpAppender」を指定して、しかるべき設定を行えばログを出す側は「(log4netのObject).Error("メッセージ")」のような処理を書くだけでメールが飛びます。

詳細は下記リンク先の設定サンプルにある「SmtpAppender」に。

Apache log4net/Config Samples
http://logging.apache.org/log4net/release/config-examples.html

設定例

実際の設定例はこちら。

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="to@domain.com" />
    <from value="from@domain.com" />
    <subject value="test logging message" />
    <smtpHost value="SMTPServer.domain.com" />
    <bufferSize value="512" />
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
    </layout>
</appender>

注意点

1か月後にはまったのですが、SmtpAppenderは下手をするとメールボムの発生源となりうることから、「bufferSize」に指定された件数に到達するまでメールは出ないようになっているようです。この「件数」、何のことかわからなかったのですがどうやら「行数」のようなもののようで……。

というわけで、リアルタイムに「エラー、即、メール」という要望がある場合、このバッファーサイズを調整する必要があります(2014/3/4追記)。