项目中log4j使用了很久,最近重复日志非常的多,严重影响开发效率,所以打算从log4j向logback过渡,其中也出现了一些问题,最后花了不少时间解决了,以此记录一下
首先去除掉以前的log4j的依赖
然后加入logbac依赖
![](https://img.haomeiwen.com/i9427485/93bee12057b0a8aa.png)
随后编写logback.xml,前提要删除log4j的配置文件
![](https://img.haomeiwen.com/i9427485/3c4f774c4393f93d.png)
贴出部分代码,有两个地方需要注意,使用了滚动记录日志的方式,maxFileSize必须要指定,我当时没有指定,文件中始终不能输出任何日志,找了好久才找到。
第二个就是fileNamePattern中 %i 一定要加上,其实是一个index,如果当前日志超过了设置的maxFileSize,就会生成第二个文件,其中%i就会加1,以做区分。
filter是为了过滤日志,只让info级别的日志写入文件
这些东西配置好后logback就可以正常使用了,不过在使用中遇到了一些小问题
logback打印了springFramework,apache等一些第三方包的打印,虽然logback中root的日志级别设置的是info,
但是依然打印了第三方包的debug日志,造成了大量冗余日志
![](https://img.haomeiwen.com/i9427485/2c84a93fbf32ad45.png)
搜索了很多资料,网上这种说话是最多的,不过我改了好几种方式都没有什么作用,level 写成error等也没有作用。
最后还是去logback官方找到了解决方案,spring和apache底层是使用commons-logging做日志输出的,logback中有好几张图解释了什么情况使用什么什么方式做桥接,其中commons-logging需要使用一个jcl的中间包,并且从spring中取出commons-logging的依赖即可,然后spring的日志会由自己配置的logback控制输出。
![](https://img.haomeiwen.com/i9427485/0e486b5c5581f24d.png)
![](https://img.haomeiwen.com/i9427485/0bf0906f505e4727.png)
最后一个是阿里巴巴的druid,找了好半天发现它的pom里面虽然引用了log4j等日志框架,但是scope都是provided,所以很有可能就是依赖项目中的其他log4j,最后才发现百度的api中引入了log4j,顺便将百度的日志也改好了。
![](https://img.haomeiwen.com/i9427485/7e9df8d64e829aee.png)
![](https://img.haomeiwen.com/i9427485/8691a700ce6fab7a.png)
去掉了百度中的log4j依赖,并加入中间包做桥接,至此,这个问题就算是解决了。
到现在也没有用logger的节点来解决这个问题,如果有清楚的朋友可以说一下,logger节点控制不了第三方包的日志级别,反正我自己控制不了 - -
网友评论