【问题标题】:Why mybatis force prints log4j DEBUG info to the console为什么 mybatis 强制将 log4j DEBUG 信息打印到控制台
【发布时间】:2015-01-05 02:12:44
【问题描述】:

我已经将 mybatis 配置为使用 log4j 进行日志记录。我将 log4j 配置为仅打印警告信息。但是当我运行它时,mybatis 会向控制台打印很多 sql 调试消息:

<http-bio-80-exec-1 10:08:54,969> <org.apache.ibatis.logging.jdbc.BaseJdbcLogger:139> DEBUG - ==>  Preparing: select count(*) from accounts 
<http-bio-80-exec-1 10:08:54,993> <org.apache.ibatis.logging.jdbc.BaseJdbcLogger:139> DEBUG - ==> Parameters: 
<http-bio-80-exec-1 10:08:55,093> <org.apache.ibatis.logging.jdbc.BaseJdbcLogger:139> DEBUG - <==      Total: 1

mybatis.xml 文件:

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

log4j.properties 文件:

# appenders
logFormat=<%t %d{HH:mm:ss,SSS}> <%C:%L> %-5p - %m%n
log4j.appender.appender_console=org.apache.log4j.ConsoleAppender
log4j.appender.appender_console.layout=org.apache.log4j.PatternLayout
log4j.appender.appender_console.layout.ConversionPattern=${logFormat}
log4j.appender.appender_file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.appender_file.layout=org.apache.log4j.PatternLayout
log4j.appender.appender_file.layout.ConversionPattern=${logFormat}
log4j.appender.appender_file.File=${webRootDir}/../../../logs/log
log4j.appender.appender_file.DatePattern='-'yyyy.MM.dd'.log'

# config for all packages
log4j.rootLogger=WARN, appender_console, appender_file

# config for specific packages
log4j.logger.my_package=DEBUG
log4j.logger.com.ibatis=WARN
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=WARN
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=WARN
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=WARN
log4j.logger.java.sql.Connection=WARN
log4j.logger.java.sql.Statement=WARN
log4j.logger.java.sql.PreparedStatement=WARN
log4j.logger.java.sql.ResultSet=WARN
log4j.logger.org.apache.ibatis.logging.jdbc.BaseJdbcLogger=WARN

applicationContext.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.0.xsd
">



    <!-- for springmvc & mybatis source scanning -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="***" />
    </bean>
    <context:component-scan base-package="***" />



    <!-- for database -->
    <context:property-placeholder ignore-unresolvable="true" location="classpath:config/jdbc.properties" />
    <bean id="dbcp2_mysql" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${dbcp2_mysql.driverClassName}" />
        <property name="url" value="${dbcp2_mysql.url}" />
        <property name="username" value="${dbcp2_mysql.username}" />
        <property name="password" value="${dbcp2_mysql.password}" />
        <!--<property name="initialSize" value="${dbcp2_mysql.initialSize}" />-->
        <!--<property name="maxIdle" value="${dbcp2_mysql.maxIdle}" />-->
        <!--<property name="minIdle" value="${dbcp2_mysql.minIdle}" />-->
    </bean>
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dbcp2_mysql" />
        <property name="mapperLocations" value="classpath:***" />
        <property name="configLocation" value="classpath:config/mybatis.xml"></property>
        <property name="typeAliases" value="org.springframework.util.LinkedCaseInsensitiveMap" />
        <property name="transactionFactory">
            <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
        </property>
    </bean>
</beans>

PS:我正在使用 intellij IDEA

【问题讨论】:

    标签: java spring log4j mybatis


    【解决方案1】:

    我自己解决了这个问题 我应该在配置文件中添加log4j.logger.my_package.mapper=LOG_LEVEL

    【讨论】:

    • 谢谢!这就是答案,它需要使用 log4j 注册的映射器包 - 而不是 org.apache.ibatis...
    • 澄清一点“my_package.mapper”必须匹配是在您的 XML 映射器文件的命名空间部分。
    【解决方案2】:

    您忘记了log4j.properties 中最后一个属性前面的log4j.logger

    【讨论】:

    • 我已经解决了这个问题,但它没有用。而且,理论上只有“log4j.rootLogger=WARN”就已经足够了。因为所有包的设置都会继承log4j.rootLogger
    猜你喜欢
    • 2022-12-07
    • 2018-07-14
    • 1970-01-01
    • 2014-08-24
    • 2014-02-20
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2013-10-02
    相关资源
    最近更新 更多