MyBatis打印日志的配置分为两部分:MyBatis的配置和Log4j的配置

  • 首先MyBatis的配置(注:中文的文档里面没有这些):http://mybatis.org/mybatis-3/logging.html
    • 在spring的sqlSessionFactory中配置mybatis的配置的位置
      • mybatis-config.xml这个配置文件可以扩展MyBatis的一些配置,而不用首先与spring的固有格式
      • 在mybatis-config.xml里面配置好MyBatis日志的实现方式
        • MyBatis支持的日志实现有:SLF4J、Apache Commons Logging、Log4j 2、Log4j、JDK logging,但这里只展示log4j的配置
spring的配置

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        ***
        <property name="configLocation" value="classpath:spring/mybatis-config.xml"/>
        ***
    </bean>
mybati-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="logImpl" value="LOG4J"/>
        ***
    </settings>
</configuration>
  • Log4j的配置
    • https://logging.apache.org/log4j/1.2/manual.html
    • 按Log4j的文档,其配置主要有:Loggers、Appenders和Layouts
    • 其中Appenders和Layouts都可以copy别人的代码再对其进行修改来进行配置,下面是我的其中一个appender的配置,也是用于MyBatis的sql日志的配置。
      • 需要注意的配置有encoding,日志的编码
      • threshold,这个appender会记录的日志的level
        • 日志的level有:TRACE,DEBUG,INFO,WARN,ERROR and FATAL
      • layout配置,打印日志的格式
log4j的appender配置

<appender name="DEBUG-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="file" value="/Users/emotion/logs/applog/debug.log"/>
        <param name="append" value="true"/>
        <param name="encoding" value="UTF-8"/>
        <param name="threshold" value="DEBUG"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                   value="%d [%X{requestURIWithQueryString}]%n  SQL:  %-5p %c{2} - %m%n"/>
        </layout>
    </appender>
  • 接着
    • logger的配置
    • 我们可以将logger看做一棵树,其中root节点是所有日志都会汇入节点的appender中
    • 当我们定义了logger之后,以logger的name作为package或者class,在这个package之下的class或者这个class的日志会使用这个特别定制的appender
    • 这样我们就可以将我们需要分离出来的日志,单独做一个appender,避免和其它文件混合在一起而导致很难查找了。
    • 在logger中的name为package或者class
    • level就是记录的日志的等级
    • appender-ref则是这个日志流会流向的appender引用
<root>
        <level value="INFO"/>
        <appender-ref ref="PROJECT"/>
        <appender-ref ref="JmonitorAppender"/>
    </root>
log4j的logger配置

   <logger name="org.apache.ibatis" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="DEBUG-APPENDER"/>
    </logger>
    <logger name="java.sql.Statement" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="DEBUG-APPENDER"/>
    </logger>
    <logger name="java.sql" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="DEBUG-APPENDER"/>
    </logger>
    <logger name="com.aliyun.tianchi.model" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="DEBUG-APPENDER"/>
    </logger>
    <logger name="com.aliyun.tianchi.mapper" additivity="true">
        <level value="DEBUG"/>
        <appender-ref ref="DEBUG-APPENDER"/>
    </logger>
  • 总结
    • 首先在MyBatis中定义logImpl,这样就可以让MyBatis的日志机制正常工作
    • 在log4j中配置好level为debug的appender和logger,这样就可以让应用的日志系统正常的记录MyBatis的日志到配置的文件里面了。