springboot日志的使用与多个日志框架冲突问题及解决
作者:worilb
文章介绍了日志级别、日志分类、logback、log4j、log4j2的使用方法,并讨论了统一日志标准的重要性,还提到了各种日志类Jar包的用途,以及如何实现SLF4J门面以兼容不同的日志框架
springboot日志的使用与多个日志框架冲突
1.日志级别
从低至高为:ALL——DEBUG——INFO——WARN——ERROR——OFF,
日志级别越低打印的日志越详细。
2.日志分类
- 项目根日志(RootLogger):全局日志,一个项目只有一个根日志
- 子日志(Logger):包级别日志,一个项目中可以有多个子日志
3.logback日志的使用
springboot默认使用logback日志。
4.log4j的使用
<!-- log4j依赖--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency>
5.log4j2的使用
<!-- log4j2依赖--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> </dependency>
6.统一日志标准
1.三种日志框架(实现不同门面)同时使用演示
从前面的例子我们可以看出,Logback已经默认实现了slf4j标准,而Log4j和Log4j2并没有实现。
2.log4j实现slf4j门面
<!-- springboot启动器依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <!-- 排除logback包--> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency>
3.log4j2实现slf4j门面
<!-- log4j2实现slf4j依赖--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> </dependency> <!-- springboot启动器依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <!-- 排除logback包--> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <!-- 排除log4j2桥接slf4j依赖--> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> </exclusion> </exclusions> </dependency>
7.各种日志类Jar包用途
- slf4j提供:
jcl-over-slf4j.jar --> (jcl -> slf4j) 将Jakarta Commons Logging日志框架到 slf4j 的桥接 jul-to-slf4j.jar --> (juc -> slf4j) 将java.util.logging的日志桥接到 slf4j log4j-over-slf4j.jar--> (log4j -> slf4j) 将log4j 的日志,桥接到slf4j osgi-over-slf4j.jar --> (osgi -> slf4j) 将osgi环境下的日志,桥接到slf4j slf4j-android.jar --> (android-> slf4j) 将android环境下的日志,桥接到slf4j slf4j-api.jar --> slf4j 的api接口jar包 slf4j-ext.jar --> 扩展功能 slf4j-jcl.jar --> (lf4j -> jcl ) slf4j 转接到 Jakarta Commons Logging日志输出框架 slf4j-jdk14.jar --> (slf4j -> jul ) slf4j 转接到 java.util.logging,所以这个包不能和jul-to-slf4j.jar同时用,否则会死循环!! slf4j-log4j12.jar --> (slf4j -> log4j) slf4j 转接到 log4j,所以这个包不能和log4j-over-slf4j.jar同时用,否则会死循环!! slf4j-migrator.jar --> 一个GUI工具,支持将项目代码中 JCL,log4j,java.util.logging的日志API转换为slf4j的写法 slf4j-nop.jar --> (slf4j -> null) slf4j的空接口输出绑定,丢弃所有日志输出 slf4j-simple.jar --> (slf4j -> slf4j-simple ) slf4j的自带的简单日志输出接口
- log4j2提供:
log4j-1.2-api.jar --> (log4j -> log4j2) 将log4j 的日志转接到log4j2日志框架 log4j-api.jar --> log4j2的api接口jar包 log4j-core.jar --> ( log4j2 -> log4j-core) log4j2的日志输出核心jar包 log4j-slf4j-impl.jar--> (slf4j -> log4j2) slf4j 转接到 log4j2 的日志输出框架 (不能和 log4j-to-slf4j同时用) log4j-to-slf4j.jar --> ( log4j2 -> slf4j) 将 log4j2的日志桥接到 slf4j (不能和 log4j-slf4j-impl 同时用)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。