关于日志那些事儿
JCL(Commons-logging)
- Apache日志抽象
- 动态绑定机制,在程序运行时自动找出真正使用的日志库
- 扫描classpath下的META-INF/services/org.apache.commons.logging.LogFactory,若找到则使用里面配置
- 从Classpath里寻找commons-logging.properties,找到则根据里面配置加载
- 能找到
Log4j
使用Log4j
,找不到使用JDK14Logger
,再找不到使用内部SimpleLog
- 不支持日志输出占位符
SLF4J(Simple logging facade for Java)
与
commons-logging
类似也是日志抽象静态绑定,编译时绑定真正的log实现
- 任何基于
SLF4J
的实现都需要定义StaticLoggerBinder
- 任何基于
支持日志输出占位符
提供桥接器将基于
commons-logging
jul
的日志重定向到slf4j
1
2
3
4
5<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jcl</artifactId>
<version>1.7.25</version>
</dependency>
Log4j
- Apache开源日志框架
org.apache.log4j
为log4j- 不支持日志输出占位符
org.apache.logging.log4j
为log4j2- 支持日志输出占位符
- 可以通过配置文件控制每一条输出日志的格式
Logback
- log4j创始人设计的另一开源日志组件
- 支持日志输出占位符
- 分为三个模块
logback-core
基础模块logback- classic
log4j的改良版本,完整实现slf4j apilogback-access
访问模块与Servlet容器继承提供通过Http来访问日志的功能
- 需要与SLF4J结合用
项目使用
SLF4J
SLF4J只提供Log接口,具体实现靠绑定器
slf4j-***-version.jar
***
可以为log4j12
jdk14
jcl
等如果程序中已经使用了
JCL
则需要桥接器***-over-slf4j.jar
将日志重定向到SLF4J