解决logback不打印mybatis的SQL日志的问题

工作这么多年,今天还是因为Logback的这个问题稍微卡了一下,惭愧。

问题描述:

logback配置了如下信息:

<appender name="file" .....>
...此处省略File Appender内容
</appender>

<
appender name="sql" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${logbase}sql.%d{yyyy-MM-dd}.log</FileNamePattern> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>[%d{yyyy-MM-dd HH:mm:ss} [%t] [%X{traceId}] %5p %c:%L] %m%n</pattern> </encoder> </appender> <logger name="com.xcorp.dao" level="DEBUG" additivity="false"> <appender-ref ref="sql" /> </logger> <logger name="org.mybatis" level="DEBUG" additivity="false" > <appender-ref ref="sql" /> </logger> <root level="DEBUG"> <appender-ref ref="console" /> <appender-ref ref="file" /> </root>

可以看到sql这个appender配置, 这里文件是 sql-时间戳.log

 <FileNamePattern>${logbase}sql.%d{yyyy-MM-dd}.log</FileNamePattern>

  

但是日志不在 sql-时间戳.log中,而在 file中(file appender的配置文中没有给出, 省略)。

后面看file的日志发现(如果你没有file,那么配置console, 然后就看 console ),我这种情况是 Mybatis Mapper的日志都是以dao开头

那么好,修改 logger name ="dao",问题解决。

<logger name="dao" level="DEBUG" additivity="false">
<appender-ref ref="sql" />
</logger>
<logger name="org.mybatis" level="DEBUG" additivity="false" >
<appender-ref ref="sql" />
</logger>

<root level="DEBUG">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>

为什么我这里是Mybatis Mapper的日志都是以dao开头?

查看mybatis-config.xml配置文件后,发现:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <settings>
        <setting name="useGeneratedKeys" value="true"/>
        <setting name="cacheEnabled" value="true" />
        <setting name="lazyLoadingEnabled" value="false" />
        <setting name="mapUnderscoreToCamelCase" value="true"/>
       
        <setting name="logPrefix" value="dao."/>

    </settings>
</configuration>

logPrefix="dao.", 这句导致dao的日志,不是以他原来的包名,而是以dao.开头. 因此 logger name=""不写dao开头的name, 就无法匹配, 导致无法打印到对应的appender所创建的文件内.

原文地址:https://www.cnblogs.com/slankka/p/9997812.html