# log-demos **Repository Path**: kathroon9159/log-demos ## Basic Information - **Project Name**: log-demos - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-09-30 - **Last Updated**: 2022-01-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: demos, Java, log ## README # log demos java日志中,常用的抽象有Loggers, Appenders, Layouts: - Loggers负责捕获日志事件(log.info()就是一个日志事件),并把它传递给合适的Appender - Appenders负责记录日志事件,通过Layouts进行格式化 - Layouts负责把日志事件进行格式化,决定了日志样式 ## 1. 直接使用各个日志系统 ### 1.1 log4j1-demos 直接使用log4j 1.x日志系统。依赖: - log4j.jar ### 1.2 log4j2-demos 重点关注 直接使用log4j 2.x日志系统。依赖为: - log4j-api.jar - log4j-core.jar 参看:[详解log4j2(上) - 从基础到实战](https://blog.csdn.net/autfish/article/details/51203709), [详解log4j2(下) - Async/MongoDB/Flume Appender 按日志级别区分文件输出](https://blog.csdn.net/autfish/article/details/51244787) ### 1.3 logback-demos 直接使用logback日志系统。logback会自动依赖slf4j,所以和slf4j-logback-demos是一样的 ### 1.4 jcl-demos/Jakarta Commons Logging 使用Jakarta commons-logging日志系统。这其实也是一个日志接口,底层使用log4j或JDK Logging实现。最新版本1.2,2014年之后没有更新 如果仅依赖commons-logging.jar,则会使用JUL(java.util.logging)作为实现,其效果是日志中有很多中文 ### 1.5 jul-demos/java.util.logging 使用jdk自带的日志系统,即java.util.logging。其特征是输出中文日志。 ## 2. 使用slf4j适配各个日志系统: slf4j binding ### 2.1 sfl4j-demos 仅引入slf4j-api.jar,运行时会由于没有具体实现类,所以会报错。 ### 2.2 slf4j-simple-demos 引入: - slf4j-api.jar - slf4j-simple.jar 输出日志,默认DEBUG不打印 ### 2.3 sfl4j-nop-demos 引入: - slf4j-api.jar - slf4j-nop.jar 不打印日志,也不会报错 ### 2.4 slf4j-logback-demos 引入: - ch.qos.logback:logback-classic:1.2.3 - logback-classic.jar - logback-core.jar - sfl4j-api.jar 会打印日志,默认是DEBUG也可以打印 ### 2.5 slf4j-log4j1-demos 通过slf4j适配log4j 1.x版本,引入: - slf4j-api.jar: slf4j通用接口 - slf4j-log4j12.jar: log4j 1.x实现slf4j接口 - log4j.jar: log4j 1.x的实现 只要引入org.slf4j:slf4j-log4j12:1.7.30,就会引入所有jar包 没有配置文件会报错 ### 2.6 slf4j-log4j2-demos 通过slf4j适配log4j 2.x版本,引入: - slf4j-api.jar - log4j-slf4j-imp.jar: log4j 2.x实现slf4j接口 - log4j-api.jar: log4j 2.x的具体实现 - log4j-core.jar: log4j 2.x的具体实现 只要引入org.apache.logging.log4j:log4j-slf4j-impl:2.12.1,就会引入所有jar包 没有配置文件会报错 ### 2.7 slf4j-jul-demos/java.util.logging 通过slf4j适配java.util.logging,引入: - slf4j-api.jar - slf4j-jdk14.jar: jul实现slf4j接口 - jdk自带jul实现 只要引入org.slf4j:slf4j-jdk14:1.7.30,就会引入所有jar包 ## 3. bridge 参考:http://www.slf4j.org/legacy.html - `log4j-over-slf4j-1.7.21.jar`: 针对log4j 1.x,把log4j转成slf4j,再根据需要继续转成logback等 - `log4j-to-slf4j-2.11.1.jar`: 针对log4j 2.x - `jcl-over-slf4j-1.7.25.jar`: 针对Jakarta Commons Logging - `jul-to-slf4j-1.7.25.jar`: 针对JDK Logging 注意不要循环依赖,否则会报错: - `log4j-over-slf4j.jar`和`slf4j-log4j12.jar` - `log4j-to-slf4j.jar`和`slf4j-log4j-impl.jar` - `jcl-over-slf4j.jar`和`slf4j-jcl.jar` - `jul-to-slf4j.jar`和`slf4j-jdk14.jar` ## 参考资料 - [常见java日志系统的搭配详解:关于slf4j log4j log4j2 logback jul jcl commons-logging jdk-logging](https://www.cnblogs.com/FlyAway2013/p/10691936.html) - [slf4j manual](http://www.slf4j.org/manual.html) - [slf4j bridging legacy api](http://www.slf4j.org/legacy.html) - [log4j 2.x maven dependencies](https://logging.apache.org/log4j/2.x/maven-artifacts.html)