工作5年,竟然还没搞懂Java日志体系!
来源:albenw.github.io/posts/854fc091
# 概要
# Log日志体系
# 背景/发展史
log4j(作者Ceki Gülcü)出来时就等到了广泛的应用(注意这里是直接使用),是Java日志事实上的标准,并成为了Apache的项目
Apache要求把log4j并入到JDK,SUN拒绝,并在jdk1.4版本后增加了JUL(java.util.logging)
毕竟是JDK自带的,JUL也有很多人用。同时还有其他日志组件,如SimpleLog等。这时如果有人想换成其他日志组件,如log4j换成JUL,因为api完全不同,就需要改动代码。
Apache见此,开发了JCL(Jakarta Commons Logging),即commons-logging-xx.jar。它只提供一套通用的日志接口api,并不提供日志的实现。很好的设计原则嘛,依赖抽象而非实现。这样应用程序可以在运行时选择自己想要的日志实现组件。
这样看上去也挺美好的,但是log4j的作者觉得JCL不好用,自己开发出slf4j,它跟JCL类似,本身不替供日志具体实现,只对外提供接口或门面。目的就是为了替代JCL。同时,还开发出logback,一个比log4j拥有更高性能的组件,目的是为了替代log4j。
Apache参考了logback,并做了一系列优化,推出了log4j2
# 关系/依赖
JCL
SLF4J
slf4j + logbackslf4j-api.jar + logback-classic.jar + logback-core.jar slf4j + log4jslf4j-api.jar + slf4j-log4j12.jar + log4j.jar slf4j + julslf4j-api.jar + slf4j-jdk14.jar 也可以只用slf4j无日志实现slf4j-api.jar + slf4j-nop.jar
# SLF4J的适配
你在用JCL 使用jcl-over-slf4j.jar适配 你在用log4j 使用log4j-over-slf4j.jar适配 你在用JUL 使用jul-to-slf4j.jar适配
# 让Spring统一输出
# 适配思路
# 常见问题
Failed to load class org.slf4j.impl.StaticLoggerBinder
Multiple bindings
# 代码规范
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(Abc.class);
# 总结
最近熬夜给大家准备了515套Java代码,有一些是业务类的小项目,比如Java博客项目,也有脚手架、也有平时用一些的工具类、21套小程序代码,也有一些游戏类的项目。 扫以下二维码并回复“828”即可获取
或者在本公众号对话框回复【828】马上获取
评论