ali druid filters log4j 配置不正常,导致的 乱打印 执行SQL 日志的BUG

℡╲_俬逩灬. 提交于 2020-03-20 10:28:26

3 月,跳不动了?>>>

duruid 版本: 

 <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.6</version>
            </dependency>

项目使用的是 spring boot + jpa + druid  , LOG是 logback , 在 未改造成微服务之前 并没有 出现 druid 打印 SQL内容的情况

后来改造成微服务之后,不久就出现了 下面的LOG:

内容:

<2013-07-10 13:29:29> <DEBUG> - {conn-10031} pool-connect
<2013-07-10 13:29:29> <DEBUG> - {conn-10031} pool-connect
<2013-07-10 13:29:29> <DEBUG> - {conn-10031} setAutoCommit false

<2013-07-10 13:29:29> <DEBUG> - {conn-10031, pstmt-20048} Types : []
<2013-07-10 13:29:29> <DEBUG> - {conn-10031, pstmt-20048} Types : []
<2013-07-10 13:29:29> <DEBUG> - {conn-10031, pstmt-20048, rs-50060} query executed. 94.01312 millis. select ... where 1=1
<2013-07-10 13:29:29> <DEBUG> - {conn-10031, pstmt-20048, rs-50060} query executed. 94.01312 millis. select ... where 1=1

...

<2013-07-10 13:29:29> <DEBUG>  - {conn-10031, pstmt-20048, rs-50061} open
9> {conn-10031} commited
...

很是奇怪。

logback.xml 

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
    %m 输出代码中指定的消息
    %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
    %r 输出自应用启动到输出该log信息耗费的毫秒数
    %c 输出所属的类目,通常就是所在类的全名
    %t 输出产生该日志事件的线程名
    %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
    %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
    %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
    -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d |-%p %class:%line - %m%n</pattern><!-- 此处设置输出格式 -->
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
    </appender>
    <appender name="fileLogger"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>/data/app/logs/cloudx/o2o-service.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>/data/app/logs/cloudx/o2o-service-%d-%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 日志文件的最多存储64MB -->
                <maxFileSize>64 MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <pattern>%d |-%p %class:%line - %m%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
    </appender>

  

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>


    <logger name="com.newpearl" level="DEBUG">
        <appender-ref ref="fileLogger"/>
    </logger>
</configuration>

日志配置打印信息只是 打印 info 级别的信息啊, 怎么 打印了 druid 的 sql log 到控制台了?

 

druid 配置 的 过滤器是: 

filters: stat,wall,log4j

配置了 log4j 正常应该不会有效果啊。

 

最终解决

参考 logback 配置 druid :  https://blog.csdn.net/qq_42145871/article/details/90704632

将 过滤器 改为: 

filters: stat,wall,slf4j

即可修复 上面的出现的异常了。

因为 改造成了 微服务后, 某些包依赖进去了  log4j 的 包,

然后 配置了 log4j 的Filter , druid 就使用了 默认的 log4j 的配置,就将内容都 打印到了 控制台

 

ali druid 的 文档参考

因为druid  给到了 Apache ,但是 Apache的 druid 表示完全看不懂了,完全不一样了。

这里 附上 参考文档 地址

druid 的 https://www.bookstack.cn/read/Druid/2fa0c5cdf8a9e77e.md
 
 GitHub : https://github.com/alibaba/druid/wiki

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!