zoukankan      html  css  js  c++  java
  • 解决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所创建的文件内.

  • 相关阅读:
    创建SSIS包—ETL中典型的数据清洗
    SSIS中的容器和数据流—数据转换(Transformations)
    创建SSIS包—循环和动态package
    SSIS中的容器和数据流—数据转换(Transformations)续
    创建SSIS包—建立端到端的package
    SQL点滴9—SQL Server中的事务处理以及SSIS中的内建事务
    SSIS中的容器和数据流—调试工具数据视图
    SQL点滴11—重置win7登录密码影响SQL登录
    SQL点滴10—使用with语句来写一个稍微复杂sql语句,附加和子查询的性能对比
    SSIS中的容器和数据流—举例说明数据转换任务
  • 原文地址:https://www.cnblogs.com/slankka/p/9997812.html
Copyright © 2011-2022 走看看