一.列举
门面类
- Apache Commons Logging (JCL)
之前叫 Jakarta Commons Logging。Apache提供的一个通用日志接口,用户可自由选择日志实现组件,采用运行时动态查找的机制
- SLF4J
Simple Logging Facade for Java , 对不同日志组件的门面封装 , 采用编译时静态绑定的机制
- log4j2-api
LOG4J 2项目中的facade分离设计
非门面类
- java.util.logging (JUL)
JDK原生的日志处理类库
- LOG4J
LOG4J 1.X版本,1.X已停止更新
- log4j2-core
LOG4J 2项目中的implement分离设计
- LogBack
LOG4J作者的设计的又一日志组件
二.疑问
- 为什么需要门面类日志组件?
假如一个应用程序用到了两个组件,恰好两个组件使用不同的日志工具,那么应用程序就会有两份日志输出了。 若使用日志门面,开发者只需要针对门面接口开发,而调用组件的应用程序则可以搭配自己喜好的日志实现工具。
- SLF4J和Apache Commons Logging关联日志实现类库方式的差异
SLF4J在编译时静态绑定的机制,Apache Commons Logging采用运行时动态查找的机制。 程序规模越来越庞大时,动态绑定并不是总能成功。 该解决方法之一就是在程序部署时静态绑定指定的日志工具,这就是 SLF4J 产生的原因。
- 如何处理多种统一工程存在多种日志组件的情况?
这时你需要一个桥接器(名字为 XXX-over-slf4j.jar)把他们的日志输出重定向到 SLF4J。 比如jcl-over-slf4j.jar,即使某个组件原本是通过 JCL 输出日志的,现在却会被 jcl-over-slf4j “骗到”SLF4J 里, 然后 SLF4J 又会根据绑定器把日志交给具体的日志实现工具。