日志使用最佳实践:slf4j+log4j2
添加依赖
<!-- log -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<!--log end -->
配置log4j2.xml — 日志工具会读取名为log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appenders>
<!-- Console都直接输出到标准输出SYSTEM_OUT,并定义格式pattern -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy/MM/dd HH:mm:ss.SSS} %t [%p] %c{1} (%F:%L) %msg%n" />
</Console>
</appenders>
<loggers>
<root level="INFO" includeLocation="true">
<!-- 所有info或info级别以上的日志,都通过Console定义的方式输出 -->
<AppenderRef ref="Console" />
</root>
</loggers>
</configuration>
打印日志
package com.hello;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sun.rmi.runtime.Log;
public class LogTest {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(Log.class);
logger.info("Start to log: args={}", args);
}
}
日志体系如下图(来源美团同学)
image.png
上面日志使用最佳实践:slf4j+log4j2使用的是
image.png
代码只使用slf4j-api的facade接口。
然后适配器层只能选择一个。
桥接层桥接多个实现层到slf4j-api。
日志的绑定过程
image.png
网友评论