前に作成したSeasar2のバージョン変更をしたアプリにlog4jでINFO以上のログをファイルに出力し、ERROR時はメールを送信するようにしてみました。
Struts2.2のアプリでやったのと同じような挙動です。
JARを追加
/pom.xmlを右クリックして[Add Dependency]
javax.mail -> mail -> 1.4.4
log4jのバージョン変更
/pom.xmlを変更
<省略> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId><version>1.2.13</version><version>1.2.16</version> </dependency> <省略>
設定変更
/src/main/resources/log4j.propertiesを削除&作成
※SMTPHostはローカルのSMTPが存在する想定。FromとToには受信したいアドレスを設定する。
ちなみに標準ではSMTP認証等には対応していないみたい。
あと、_hostname_にサーバ名を入れておくとどのサーバから来たか解るので便利かな。
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%-5p %d [%t] %m%n log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender log4j.appender.FILE.File=/var/log/tomcat/seasar2.log log4j.appender.FILE.Append=true log4j.appender.FILE.DatePattern='.'yyyy-MM-dd log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.SMTPHost=localhost log4j.appender.MAIL.From=hoge@hogehoge.com log4j.appender.MAIL.To=hoge@hogehoge.com log4j.appender.MAIL.Subject=seasar2 report in _hostname_ log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=%d [%t] %-5p %c - %m%n log4j.rootLogger=INFO, CONSOLE, FILE, MAIL
ちなみにこの設定ではDEBUGログは出力されません。
出力するにはrootLoggerのINFOをDEBUGに変更します。
開発環境ではDEBUGレベルでFILEやMAILはない方が良いかも。
log4j.rootLogger=INFO, CONSOLE, FILE, MAIL ↓ log4j.rootLogger=DEBUG, CONSOLE
/src/main/java/ap/action/IndexAction.javaを変更
上記のstruts.xmlで定義したpackageを参照させるようにします。
※青字は動作確認用です。
package ap.action; import org.seasar.framework.container.S2Container; import org.seasar.framework.container.factory.SingletonS2ContainerFactory; import org.seasar.framework.log.Logger; import org.seasar.struts.annotation.Execute; <省略> public class IndexAction { /** Logger. */ private static Logger logger = Logger.getLogger(IndexAction.class); <省略> public String index() { // 動作確認 logger.debug("[IndexAction]DEBUGログ"); logger.info("[IndexAction]INFOログ"); logger.error("[IndexAction]ERRORログ"); <省略> } <省略> }
/src/main/java/ap/service/impl/MessageServiceImpl.javaを変更
package ap.service.impl; import org.seasar.framework.log.Logger; import org.seasar.struts.util.MessageResourcesUtil; <省略> public class MessageServiceImpl implements MessageService { /** Logger. */ private static Logger logger = Logger.getLogger(MessageServiceImpl.class); <省略> public String getMessage() { // 動作確認 logger.debug("[MessageServiceImpl]DEBUGログ"); logger.info("[MessageServiceImpl]INFOログ"); logger.error("[MessageServiceImpl]ERRORログ"); <省略> } }
動作確認
http://localhost:8080/seasar2/
※コンソールとファイルとメールに「ERRORログ」が表示されればOK
メールは日本語に対応していない為、文字化けします。