LoggerをDIして手軽に使う

たいして役に立たないかもしれないけど、Seasar2でログ出力する時はいつもこれを使っている。

Log4jをラップしたクラスをDIして使うだけだけど・・・・。

package net.atlabo.commons.log;

import java.text.MessageFormat;

import org.apache.log4j.Logger;

/**
 * ロガークラス
 * @author @labo
 *
 */
public class TraceLog {
	/* ロガーインスタンス */
	private Logger logger;

	public TraceLog() {
		/* ロガーを生成 */
		this.logger = Logger.getLogger("trace");
	}

	/**
	 * DEBUGログ出力
	 * @param msg 出力メッセージ
	 * @param t 例外クラス
	 * @param args パラメータ
	 */
	public void debug(String msg, Throwable t, Object... args) {
		if (args != null) {
			// 引数がある場合バインドする
			msg = MessageFormat.format(msg, args);
		}

		// DEBUGログ出力
		logger.debug(msg, t);
	}

	/**
	 * DEBUGログ出力
	 * @param msg 出力メッセージ
	 * @param args パラメータ
	 */
	public void debug(String msg, Object... args) {
		debug(msg, null, args);
	}

	/**
	 * INFOログ出力
	 * @param msg 出力メッセージ
	 * @param t 例外クラス
	 * @param args パラメータ
	 */
	public void info(String msg, Throwable t, Object... args) {
		if (args != null) {
			// 引数がある場合バインドする
			msg = MessageFormat.format(msg, args);
		}

		// INFOログ出力
		logger.info(msg, t);
	}

	/**
	 * INFOログ出力
	 * @param msg 出力メッセージ
	 * @param args パラメータ
	 */
	public void info(String msg, Object... args) {
		info(msg, null, args);
	}

	/**
	 * WARNログ出力
	 * @param msg 出力メッセージ
	 * @param t 例外クラス
	 * @param args パラメータ
	 */
	public void warn(String msg, Throwable t, Object... args) {
		if (args != null) {
			// 引数がある場合バインドする
			msg = MessageFormat.format(msg, args);
		}

		// WARNログ出力
		logger.warn(msg, t);
	}

	/**
	 * WARNログ出力
	 * @param msg 出力メッセージ
	 * @param args パラメータ
	 */
	public void warn(String msg, Object... args) {
		warn(msg, null, args);
	}

	/**
	 * ERRORログ出力
	 * @param msg 出力メッセージ
	 * @param t 例外クラス
	 * @param args パラメータ
	 */
	public void error(String msg, Throwable t, Object... args) {
		if (args != null) {
			// 引数がある場合バインドする
			msg = MessageFormat.format(msg, args);
		}

		// ERRORログ出力
		logger.error(msg, t);
	}

	/**
	 * ERRORログ出力
	 * @param msg 出力メッセージ
	 * @param args パラメータ
	 */
	public void error(String msg, Object... args) {
		error(msg, null, args);
	}

	/**
	 * FATALログ出力
	 * @param msg 出力メッセージ
	 * @param t 例外クラス
	 * @param args パラメータ
	 */
	public void fatal(String msg, Throwable t, Object... args) {
		if (args != null) {
			// 引数がある場合バインドする
			msg = MessageFormat.format(msg, args);
		}

		// FATALログ出力
		logger.fatal(msg, t);
	}

	/**
	 * FATALログ出力
	 * @param msg 出力メッセージ
	 * @param args パラメータ
	 */
	public void fatal(String msg, Object... args) {
		fatal(msg, null, args);
	}
}

上記クラスをapp.diconかどっかに設定します。

使い方は簡単、使用したいクラスでTraceLogをDIします。

@Resource
private TraceLog traceLog;

んで、使うだけ。

traceLog.info("ログ出力します。");

MessageFormat.formatを備えているので、バインドもできます。

traceLog.info("{0}を開始します。", "ログイン");

【出力】 ログインを開始します。

ただそれだけ〜。
Logger.getLoggerしてもいいけど、この方が手軽なので重宝してます。

あ、Log4jを使うのでlog4j.propertiesまたはlog4j.xmlはちゃんと設定してね。