Q1:ERRORレベル以上のログが発生した場合メールを送信するには?

以下のように SMTPAppender を使用します。

  <appender name="SMTP" class="org.apache.log4j.net.SMTPAppender">
    <param name="Threshold" value="ERROR" />
    <param name="BufferSize" value="1" />
    <param name="To" value="宛先アドレス" />
    <param name="From" value="送信元アドレス" />
    <param name="Subject" value="メールタイトル" />
    <param name="SMTPHost" value="SMTPサーバのIPアドレス" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern"
        value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </layout>
  </appender>

Threshold パラメータで ERROR 以上にログレベルを絞り、宛先アドレス、タイトル等を設定しています。アペンダクラスにはorg.apache.log4j.net.SMTPAppender を使用します。

BufferSize パラメータはログイベントのバッファサイズで、 ERROR 及び FATAL 以外のログイベントが発生すると、このバッファへ格納されます。ERROR または FATAL のログイベントが発生すると、(バッファサイズに関わらず)バッファに貯められたログイベントと今回発生した ERROR または FATAL のログイベントを含んだメールが送信されます(バッファは空になります)。
上の設定では ERROR, FATAL 以外のログイベントを送信対象から外すために、Threshold パラメータによって対象ログレベルを ERROR 以上に絞っています。そのため、発生するログイベントは、ERROR , FATAL だけであり、バッファにログイベントが貯められることなく、即座にメールが送信されます。

上では BufferSize パラメータの値を 1 にしていますが、これを例えば 5 に設定し、ERROR, FATAL と連続してログイベントが発生しても、バッファリングは行われず、メールはそれぞれのイベントに対して即座に1通づつ送信されることに注意して下さい。ERROR, FATAL はバッファサイズに関わらず、発生したら即座にメールが送信されるからです。


トップページへ戻る