Java log
在java项目中经常会使用log,但是自己在使用和选择上都不是特别清楚。所以系统的学习一下。
多种log之间的关系
本身java系统中有非常多的log种类的选择:
- jdk提供的log
- commons log
- log4j
日志框架
一般日志框架由于:
- logger
- handler
- formater
- output
这四个部分组成,logger需要实现filter,handler中也需要实行多种filter
一般的调用关系:
app-> logger -> handler -> output
其中一个logger可以对应多个handler,也就是一个app事件,可以使用多个handler对象进行处理。
log4j的使用
主要讨论在maven项目下如何使用log4j:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
没有使用properties文件
没有设置appenders
final Logger logger = Logger.getLogger(this.getClass());
public void h4j() {
// logger.addAppender(new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
logger.info("hello");
logger.error("test error");
}
输出结果
log4j:WARN No appenders could be found for logger (l4j.Hello4j).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
提示:没有设置appenders
代码设置appenders
final Logger logger = Logger.getLogger(this.getClass());
public void h4j() {
logger.addAppender(new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));
logger.info("hello");
logger.error("test error");
}
输出结果
0 [main] INFO l4j.Hello4j - hello
2 [main] ERROR l4j.Hello4j - test error
使用log properties
log4j+sl4j
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
logback+sl4j
添加logback依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
对比log4j和logback的配置文件
复杂问题
因为我们在设计系统的时候,可能需要依赖很多其他的组件。但是这些组件都可能接入有自己的log框架,比如有使用log4j的,有使用common-log的等等。如果有些系统是使用了sl4j,那么就非常的简单集成即可。
但是有些系统是直接使用了log 框架,比如直接使用了log4j,common-log。我们在实现的时候需要把这些系统中依赖的log4j,或者common-log去除掉。然后添加sl4j和log4j或者common-log桥连接插件即可。
网友评论