一、总览
本文章不对日志组件进行优劣评价,只是对关系进行对比。在日志中组件中存在这样的几种关系,这几种关系理解清楚,有助于我们对日志的引入和使用。
二、日志门面
日志门面就是指直接引入我们程序中进行记录日志的日志组件,作为日志门面的这些组件会在程序中直接依赖,上图中就列举的几种常见的日志门面的组件。像一些软件直接回默认使用一些组件,比如 Spring 使用的就是 commons-logging, activiti 使用的日志门面就是 slf4j, 其他的软件也都会选用自己认为好用的日志门面。
三、日志实现
除了 log4j 既是门面又是实现之外,commons-logging 和 slf4j 都是能直接打印日志的,都需要依赖一个日志实现来打印日志,上图中也举了几个日志实现。
四、桥接方式
slf4j 默认和 logback 做了一些桥接的处理,那么桥接的作用是什么呢,假如我想使用 slf4j 做为实现的门面,然而同时我想使用 log4j 作为真正的日志实现,这个时候就需要 slf4j-logrj12 jar 包,现在应该可以理解桥接方式了。
五、改变依赖
这里的作用是为了避免一些冲突,例如在这样的场景下,我们使用 spring 做为开发,而我们开发的软件要使用的是 slf4j 作为日志门面,这个时候因为 Spirng 默认使用的是 commons-logging 作为日志门面,这个时候就会发生一些冲突,所以我们可以引入 jcl-over-slf4j,通过这个组件把 commons-logging 覆盖掉,为了把历史软件内部的依赖覆盖掉,就可通过这个方式改变依赖。