これは注意した方がよいです〜
logbackにはSMTPアペンダがあり、log.error()等を検出して、アラートメールを送信することができます。
メール送信には同期送信と非同期送信があり、パフォーマンス・リソース的には当然非同期送信の方がよいです。
しかし、この非同期送信には問題があります。
This property determines whether email transmission is done asynchronously or not. By default, the asynchronousSending property is 'true'. However, under certain circumstances asynchronous sending may be inappropriate. For example if your application uses SMTPAppender to send alerts in response to a fatal error, and then exits, the relevant thread may not have the time to send the alert email. In this case, set asynchronousSending property to 'false' for synchronous email transmission.
http://logback.qos.ch/manual/appenders.html#smtpAsynchronousSending
要は、別スレッドはlogbackが非同期メール送信の完了を待ってくれないから、
メールが送信される前にアプリが終了しちゃう可能性があるから、
バッチのようなスタンドアロン実行する場合は非同期をオフにした方がいいよ、とのことです。
実際私はこの罠にハマリ、何故バッチの場合だけメール送信されないんだろう、
と思ったら、こういう理由なんですね。
webアプリの場合はtomcatが終了するまではそういった状況にはなりません。
ただしtomcatが終了するタイミングでアラートが送信された場合、同じ理由でメール送信が間に合わない可能性はあります。
結果的に、batchプロジェクトの場合は以下の設定でいくといいかと思います。
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <smtpHost>${smtpHost}</smtpHost> <smtpPort>${smtpPort}</smtpPort> <from>${from}</from> <to>${to}</to> <subject>${HOSTNAME} - %m</subject> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>[%-5level][%d{yyyy-MM-dd HH:mm:ss.SSS}] %class - %msg%n</Pattern> </layout> <asynchronousSending>false</asynchronousSending> <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker"> <bufferSize>512</bufferSize> </cyclicBufferTracker> </appender> <root> <level value="INFO" /> <appender-ref ref="EMAIL" /> </root>
jspで発生したエラーをlogbackでアラートメール送信する手順をまとめました!
↓↓↓↓ こちらです ↓↓↓↓↓

- 作者: 竹添直樹,島本多可子,小津美夕紀,亀井隆司
- 出版社/メーカー: 翔泳社
- 発売日: 2011/07/16
- メディア: 大型本
- 購入: 6人 クリック: 217回
- この商品を含むブログ (25件) を見る

- 作者: J. Steven Perry
- 出版社/メーカー: O'Reilly Media
- 発売日: 2009/10/15
- メディア: Kindle版
- この商品を含むブログを見る