前に作成した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
メールは日本語に対応していない為、文字化けします。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です