使用org.slf4j.Logger创建扩展记录器的备忘录


概述

org.slf4j.Logger可以用于一般目的,但是必须统一业务应用程序的日志输出级别。
因此,创建一个扩展的记录器,该记录器仅输出业务规则中定义的跟踪级别。

扩展记录器类

创建您自己的包装

org.slf4j.Logger的记录器类。
只需将输出方法留给org.slf4j.Logger
调试级别仅在开发期间输出。

SystemLogger.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
 *
 */
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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());
    }
}

验证环境

通过Spring Batch验证
在运行时输出slf4j错误。 slf4j的模块定义是必需的,请参考以下站点
用GAE / J摆脱神秘的SLF4J WARN

pom.xml

1
2
3
4
5
6
7
8
9
10
<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>