1 日志使用规范
应用中不应该直接使用日志系统(Log4j,Logback)中的API,而应该依赖使用日志框架SLF4J中的API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Aoe.class);
2 日志配置统一版本
<properties>
<log4j2.version>2.8.2</log4j2.version>
</properties>
3 log4j适配log4j2框架
3.1 排除所有直接间接依赖的log4j的包
因为不能保证log4jxxx.jar在log4j-1.2-api之后执行,不排除会导致log4j的日志不能输出。
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
3.2 Log4j2的jar包版本要统一
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>${log4j2.version}</version>
</dependency>
3.3 Log4j适配log4j2的jar包与log4j2的jar包版本一致
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
4 slf4j+log4j2
使用SLF4j+Log4j2时使用的桥接包是log4j-slf4j-impl
jar包版本同log4j2的版本
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j2.version}</version>
</dependency>
5 其他需要排除的包
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
<exclusions>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
6 常见错误原因定位
6.1 SLF4J: Class path contains multiple SLF4J bindings.
slf4j-log4j12包冲突,排除即可
6.2 找不到log的配置文件
a)Log日志的配置文件log4j.xml查看是否存在
b)自定义log配置文件ConfigurationSource,注意这之前不要有日志的初始化及使用
7 其他常见的log相关包说明
7.1 slf4j-log4j12
slf4j与log4j的桥接包
7.2 slf4j-jdk14
slf4j到java.util.logging的桥接包
7.3 log4j-to-slf4j
将log4j2的接口适配到slf4j上,不能和log4j-slf4j-impl同时存在
7.4 slf4j-jcl
将slf4j适配到JCL上
7.5 Logback
Logback是由log4j创始人设计的另一个开源日志组件,详细见官网 http://logback.qos.ch
7.6 logback-classic
将slf4j适配到logback上