1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

org.slf4j.Loggerを使った拡張ロガーを作成するための忘備録

Last updated at Posted at 2019-11-04

概要

org.slf4j.Loggerは汎用的に使用できるが、業務アプリではログ出力レベルの統一が必要。
そのためビジネスルールで定義したトレースレベルのみ出力する拡張ロガーを作成する。

拡張ロガークラス

org.slf4j.Loggerをラップした独自ロガークラスを作成する。
出力方法はorg.slf4j.Loggerに任せるだけ
Debugレベルは開発時のみ出力する。

SystemLogger.java
/**
 * 
 */
package jp.co.product.system.common;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * ログ出力共通クラス
 * 
 */
public class SystemLogger {

	private Logger logger;
	
	/**
	 * コンストラクタ
	 * 
	 * @param	cls	
	 * @see	org.slf4j.LoggerFactory#getLogger(Class)
	 */
	public SystemLogger(Class<?> cls) {
		logger = LoggerFactory.getLogger(cls);
	}
	
	/**
	 * エラー出力
	 * 
	 * @param	msg	ログ出力内容
	 * @see	org.slf4j.Logger#error(String)
	 */
	public void error(String msg) {
		logger.error(msg);
	}
	
	/**
	 * インフォメーション出力
	 * 
	 * @param	msg	ログ出力内容
	 * @see	org.slf4j.Logger#error(String)
	 */
	public void info(String msg) {
		logger.info(msg);
	}
	
	/**
	 * デバッグ出力
	 * 
	 * @param	msg	ログ出力内容
	 * @see	org.slf4j.Logger#error(String)
	 */
	public void debug(String msg) {
		if (logger.isDebugEnabled())
			logger.debug(msg);
	}
}

log4j.properties

log4j.propertiesは通常通り。拡張ロガーを実装したクラスから出力できるように設定するだけ。

log4j.properties
log4j.rootCategory=INFO, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n

log4j.logger.org.apache.activemq=ERROR
log4j.logger.org.springframework.batch=DEBUG
log4j.logger.org.springframework.transaction=INFO
log4j.logger.jp.co.product.system.batch=INFO

log4j.logger.test.jdbc=DEBUG
# for debugging datasource initialization
# log4j.category.test.jdbc=DEBUG

呼び出しクラス

拡張ロガークラスのインスタンスを生成しておき、使うだけ。
サンプルソースなのでインスタンスの生成がシングルトンになってない・・・(T&T)

ExampleItemWriter.java
package jp.co.product.system.batch.demo;

import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.batch.item.ItemWriter;
import org.springframework.stereotype.Component;

import jp.co.product.system.common.SystemLogger;


/**
 * Dummy {@link ItemWriter} which only logs data it receives.
 */
@Component("writer")
public class ExampleItemWriter implements ItemWriter<Object> {

	//private static final Log log = LogFactory.getLog(SystemLoggerExampleItemWriter.class);
	private static final SystemLogger log = new SystemLogger(ExampleItemWriter.class);
	
	/**
	 * @see ItemWriter#write(java.util.List)
	 */
	public void write(List<? extends Object> data) throws Exception {
//		log.info(data);
		log.debug("debug" + data.toString());
		log.info("Info" + data.toString());
		log.error("error" + data.toString());
	}
}

検証環境

SpringBatchにて検証
実行時にslf4jのエラーが出力される。下記サイトを参照してslf4jのモジュール定義が必要
GAE/Jで謎のSLF4JなWARNを退治する

pom.xml
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.2</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.2</version>
</dependency>
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?