1.常见的日志框架
日志框架 | 介绍 |
jul(java.util.logging) | jdk1.4加入,为了对抗log4j,效率灵活性较差使用较少 |
log4j | 最广泛应用的日志框架,成为事实上的标准 |
logback | 基于slf4j-api接口实现,性能高于log4j |
log4j2 | 重写了log4j,性能高于log4j,logback |
注:log4j、logback、log4j2是同一个作者Ceki Gülcü
上面介绍了四种日志框架,到底用哪个日志框架,现在广泛应用的还是log4j,如果负载较高可以考虑使用logback和log4j2.
但是如果两个系统相互依赖,用的不同的日志框架,难道需要依赖两个日志框架么?
Apache和log4j的作者提供两种选择,JCL(commings-log)和SLF4J(simple log facade for java)两个日志框架的门面。提供了统一的日志抽象接口,适配和转接了各种日志框架,使用者只用调用抽象层统一的接口就行了。应用层不直接依赖实际的日志实现。
2.日志门面JCL和SLF4J
日志门面 | 介绍 |
JCL(commings-log) | Apache提供的comming-log |
SLF4J(simple log facade for java) | Log4j、Logback、Log4j2作者提供 |
3.日志体系各种包总结
日志框架 | 包 |
log4j | 只有log4j |
log4j2 | log4j-api(日志接口) log4j-core(log4j-api的实现) |
logback | logback-core(logback核心包) logback-classic(slf4j-api的实现) |
commons-logging | commons-logging (jcl) log4j-jcl(commons-logging到log4j的桥梁) jcl-over-slf4j(commons-logging到slf4j的桥梁) |
slf4j | slf4j转向某个实际日志框架: slf4j-jdk14:slf4j到jdk-logging的桥梁 slf4j-log4j12:slf4j到log4j1的桥梁 log4j-slf4j-impl:slf4j到log4j2的桥梁 logback-classic:slf4j到logback的桥梁 slf4j-jcl:slf4j到commons-logging的桥梁 某个实际日志框架转向slf4j: jul-to-slf4j:jdk-logging到slf4j的桥梁 log4j-over-slf4j:log4j1到slf4j的桥梁 jcl-over-slf4j:commons-logging到slf4j的桥梁 |
4.集成实践
4.1 jcl与日志框架的集成
集成的框架 | 需要的包 |
jul | commons-logging jul |
log4j | commons-logging log4j1 |
log4j2 | commons-logging log4j-api (log4j2的API包) log4j-core (log4j2的API实现包) log4j-jcl (log4j2与commons-logging的集成包) |
logback | jcl-over-slf4j (替代了commons-logging) slf4j-api logback-core logback-classic logback本身的使用其实就和slf4j绑定了起来,现在要想指定commons-logging的底层log实现是logback,则需要2步走 |
4.2 slf4j与日志框架的继承
集成的框架 | 需要的包 |
jul | slf4j-api slf4j-jdk14 |
log4j | slf4j-api slf4j-log4j12 log4j |
log4j2 | slf4j-api log4j-api log4j-core log4j-slf4j-impl (用于log4j2与slf4j集成) |
logback | slf4j-api logback-core logback-classic(已含有对slf4j的集成包) |