日志-slf4j
2020-04-18 本文已影响0人
张明学
本篇主要介绍slf4j。slf4j全称:Simple Logging Facade for Java简单日志门面(Facade)。它只提供一个标准的日志接口。日志的实现还有各个日志系统实现,如log4j、log4j2、logback等等。这样做的好处是:如果各个子系统(如第三方库)都直接使用不同的日志系统,那么集成这些子系统的时候就间接引入了各个日志系统。
上面介绍了slf4j只是一套标准的日志API接口,具体的实现还是某个日志库(log4j、logback等)来处理,由于各个第三方日志库都是由各个实现,它们并没有实现统一的接口,因为还需要一个中间转换的桥梁 slf4j-xxx.jar。如slf4j-log4j2.jar、slf4j-logback.jar ......
其结构如下:
slf4j-api(接口层) --> 各日志实现包的连接层(slf4j-log4j)-->各日志实现包(log4j)
0d338744ebf81a4c54469e6ed72a6059252da624.png
slf4j集成log4j2
- 依赖
<!-- slf4j核心包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!--slf4j对应log4j2的中间件,即桥接 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.13.1</version>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.1</version>
</dependency>
其实log4j-slf4j-impl其实已经引用了log4j-core和log4j-api。所以下面的配置也可以的:
<!-- slf4j核心包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!--slf4j对应log4j2的中间件,即桥接 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.13.1</version>
</dependency>
- 添加log4j2的配置文件 resources/log4j2.properties(class根目录)
appender.out.name = STDOUT
appender.out.type = Console
appender.out.layout.type = PatternLayout
appender.out.layout.pattern = [%30.30t] %l %-5p %m%n
rootLogger.level = INFO
rootLogger.appenderRef.out.ref = STDOUT
也可以使用log4j2.xml(推荐)。有关配置参考我的另一篇文章和官方文档:
SpringBoot-集成Log4j2
官方文档
使用:
private static Logger logger = LoggerFactory.getLogger(Demo1.class);
public static void main(String[] args) {
logger.info("test={}", "message");
}
slf4j的官方文档:http://www.slf4j.org/apidocs/org/slf4j/Logger.html
可能早期开发的同学都用过log4j,log4j和log4j2都是Apache的一个开源项目,log4j2是重新架构的一款日志组件。它们有一些区别:
- log4j的groupId和artifactId都是log4j,只需要一个jar即可。(log4j2是两有个log4j-core和log4j-api,groupId变成了org.apache.logging.log4j,artifactId是log4j-core和log4j-api)
- 版本是1.x.x(log4j2的版本号是2.x.x)
- 包名是:org.apache.log4j(log4j2的包是:org.apache.logging.log4j)
- 配置文件默名文件名是:log4j.properties(log4j2的默名配置文件log4j2.xml)
本人是因为很早些年使用log4j,所以在这里介绍了一下log4j和log4j2在引用上的差别,功能上的别差更大,推荐使用log4j2