日志门面
- Apache Commons Logging (之前叫 Jakarta Commons Logging,JCL)
当程序规模越来越庞大时,JCL的动态绑定并不是总能成功,在Sping官方文档中Not Using Commons Logging小节也提到因为算法问题引起。 - SLF4J
-
SLF4J解决了JCL动态绑定引发的问题,SLF4J在程序部署时静态绑定指定的日志工具。
SLF4J绑定各类日志框架的原理图.png -
排除现有Apache Commons Logging依赖的影响
现在还有一个问题,假如你正在开发应用程序所调用的组件当中已经使用了 JCL 的,还有一些组建可能直接调用了 java.util.logging,这时你需要一个桥接器(名字为 XXX-over-slf4j.jar)把他们的日志输出重定向到 SLF4J。
SLF4J的桥接器.png
所谓的桥接器就是一个假的日志实现工具,比如当你把 jcl-over-slf4j.jar 放到 CLASS_PATH 时,即使某个组件原本是通过 JCL 输出日志的,现在却会被 jcl-over-slf4j “骗到”SLF4J 里,然后 SLF4J 又会根据绑定器把日志交给具体的日志实现工具。
过程如下:
Component(服务) -> log to Apache Commons Logging(JCL) -> jcl-over-slf4j.jar — (redirect) —> SLF4j —> slf4j-log4j12-version.jar —> log4j.jar —> 输出日志
-
注意:如果使用了log4j实现slf4j,添加log4j-over-slf4j桥接器,结果就是log4j —> slf4j —> log4j,输出日志命令被踢来踢去,此时要么去掉log4j-over-slf4j桥接器,要么替换slf4j的实现,比如换成logback,否则陷入死循环。
网友评论