解決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所創建的文件內.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM