日志框架:提供日志調用的接口,實際的日志輸出委托給日志系統實現。
- 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的場景