• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:Java常用日志系统解析

java 搞代码 4年前 (2022-01-27) 41次浏览 已收录 0个评论
文章目录[隐藏]

java中罕用的日志零碎有:

  • jcl(Jakarta Commons Logging)
  • jul(java.util.logging)
  • log4j 1.x
  • log4j 2.x
  • logback

而slf4j则是一个对立的日志接口,能够通过应用不同的jar包,来应用不同的日志零碎实现,而不用更改代码。

具体demo参看java-log-demos

1. 间接应用日志零碎

1.1 JCL/Jakarta commons-logging

commons-logging日志零碎。这其实也是一个日志接口,底层应用log4j或JDK Logging实现。

如果仅依赖commons-logging.jar,则会应用JUL(java.util.logging)作为实现,其成果是日志中有很多中文。

如果增加了log4j 1.x相干依赖log4j:log4j:1.2.17,就会应用log4j 1.x作为日志的实现。

1.2 JUL/java.util.logging

这是JDK自带的日志零碎,其特色是输入信息是中文。

利用间接应用JDK自带的日志零碎书写日志。

1.3 log4j 1.x

利用间接应用log4j.jar写日志。仅需增加log4j:log4j:1.2.17依赖即可。

配置文件为log4j.properties,详情参看log4j.properties配置详解

1.4 log4j 2.x

利用间接应用log4j 2.x对应的jar包书写日志。仅需增加org.apache.logging.log4j:log4j-core:2.12.1依赖即可。

1.5 logback

logback肯定会依赖slf4j的接口,所以应用logback的时候,肯定应用了slf4j-api.jar的接口。仅需增加ch.qos.logback:logback-classic:1.2.3即可引入所有依赖的jar包。

2. 应用slf4j(slf4j-api.jar)适配日志零碎

2.1 仅应用slf4j-api

此时没有日志零碎的具体实现,所以会报错

2.2 应用slf4j-nop作为slf4j-api的实现

slf4j-nop不会输入任何日志,仅是让slf4j-api.jar不再报错。

2.3 应用slf4j-simple作为slf4j-api的实现

应用slf4j-simple作为日志的实现类。

仅需增加org.slf4j:slf4j-simple:1.7.30即可引入所有依赖的jar包

2.4 应用jcl(commons-logging)及其实现作为slf4j-api的实现

commons-logging也是一个接口API,所以也须要具体的日志零碎实现

2.5 应用JDK自带日志零碎(JUL)作为slf4j-api的实现

这里的适配层为slf4j-jdk14.jar,应用java.util.logging作为日志零碎的实现

仅需依赖org.slf4j:slf4j-log4j12:1.7.30,就能够引入所有依赖。

2.6 应用log4j 1.x作为slf4j-api的实现

留神这里有一个适配层(adapter layer),其jar突围红色局部slf4j-log4j12.jar。适配层把slf4j-api接口的操作转换成会log4j 1.x的日志操作。

仅需依赖org.slf4j:slf4j-log4j12:1.7.30,就能够引入所有依赖

2.7 应用log4j 2.x作为slf4j-api的实现

这里的适配层为log4j-slf4j-impl.jar

仅需依赖org.apache.logging.log4j:log4j-slf4j-impl:2.12.1,就能够引入所有依赖。

2.8 应用logback作为slf4j-api的实现

同1.3 logback齐全一样。logback默认就会应用slf4j-api作为其接口,利用零碎应用logback时,会间接通过slf4j-api接口进行操作。

3. 现有日志零碎通过slf4j转为其它日志零碎-bridge

应用原生的日志零碎时,如果想要不批改代码换成另外一种日志零碎,则须要应用bridge。图中橘色的都是bridge。其原理是通过bridge把一种日志零碎转成slf4j,而后再转成其它日志零碎。应用bridge时,个别要求删除原来的日志零碎jar包,bridge会有和原来jar包一样的接口,所以利用代码不用批改。

应用bridge时,留神红色虚线连贯bridge对应的jar包和adaptation layer对应的jar包不能同时存在,否则会有堆栈溢出谬误。流入jcl-over-slf4j.jar不能和slf4j-jcl.jar同时存在。

每一类上面的依赖,灰色字体局部都不用显示引入,仅需引入彩色字体依赖,即可引入全副jar包。

留神logback因为必须应用slf4j-api来实现,所以无需bridge把他替换成其它日志零碎,仅需删除logback-classic.jar和logback-core.jar,而后再引入其它实现即可。这和本节内容无关,就不再叙述。

3.1 jcl日志零碎替换为其它日志零碎

application间接应用jcl日志零碎的接口,想要替换成其余日志零碎,则先应用jcl-over-slf4j.jar把jcl转成slf4j。留神图中jcl到bridge是虚线,阐明不用删除jcl相干jar包。

依据想要转成的日志零碎,应用不同的adaptation layer进行实现。例如想要转成log4j 2.x,则须要应用log4j-slf4j-impl.jar,把slf4j对接到log4j 2.x。而后再加上log4j 2.x的实现类log4j-api.jar和log4j-core.jar,即可实现日志零碎的替换,而不用批改利用代码。

留神红色虚线局部,jcl-over-slf4j.jar不能和slf4j-jcl.jar同时存在,否则会报错。

3.2 其它日志零碎的替换

原理和jcl差不多,就不再赘述。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:Java常用日志系统解析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址