日志框架:提供日志调用的接口,实际的日志输出委托给日志系统实现。
- JCL(Jakarta Commons Logging):比较流行的日志框架,很多框架都依赖JCL,例如Spring等。
- SLF4j:提供新的API,初衷是配合Logback使用,但同时兼容Log4j。
日志系统:负责输出日志
- Log4j:较早的日志系统,可以单独使用,也可配合日志框架JCL使用
- Logback:Log4j的替代产品,需要配合日志框架SLF4j使用
- JUL(java.util.logging):JDK提供的日志系统,较混乱,不常用
日志系统使用方式
日志框架 | 日志系统 | 说明 |
-- | log4j | log4j可单独使用,不推荐 |
JCL | log4j | log4j配合JCL使用 |
SLF4j | logback | logback配合SLF4j使用 |
SLF4j | (SLF4j-Log4j12) + log4j | log4j配合SLF4j使用,但需要使用SLF4j-Log4j12做桥接 |
SLF4j + JCL-over-SLF4j | logback | 使原来使用JCL+log4j的系统能使用logback输出日志 |
SLF4j + JCL-over-SLF4j | SLF4j-log4j12 + Log4j | 比较混乱的用法,框架使用SLF4j,但日志使用Log4j,同时兼容原来的JCL接口。这种使用方式多是由于复杂的包依赖,而每个包中使用了不同日志框架 |
SLF4j + JCL-over-SLF4j + log4j-over-slf4j | SLF4j-log4j12 + log4j | 更奇葩的用法,在上面的基础上还要兼容某些包直接使用log4j的场景 |
说明
- JCL-over-SLF4j是兼容JCL接口并使用SLF4j日志框架的一个兼容框架,依赖SLF4j,但不能与JCL共存
- SLF4j-Log4j12是为了能使Log4j工作于SLF4j环境而存在的一个兼容框架,与logback同作为日志系统,不能共存
- log4j-over-slf4j是为了使用SLF4j框架并兼容直接使用log4j的场景