概述
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> |