springboot mybatis 配置log4j打印不出sql

log4j.properties

log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO

pom.xml

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>

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>
    <properties>
        <property name="dialect" value="mysql" />
    </properties>
    <!-- 配置全局属性 -->
    <settings>
        <!-- 使全局的映射器启用或禁用缓存。 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 -->
        <setting name="aggressiveLazyLoading" value="true"/>
        <!-- 是否允许单条sql 返回多个数据集  (取决于驱动的兼容性) default:true -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!-- 是否可以使用列的别名 (取决于驱动的兼容性) default:true -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 允许JDBC 生成主键。需要驱动器支持。如果设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然可以执行。  default:false  -->
        <setting name="useGeneratedKeys" value="true"/>
        <!-- 指定 MyBatis 如何自动映射 数据基表的列 NONE:不隐射 PARTIAL:部分  FULL:全部  -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <!-- 这是默认的执行类型  (SIMPLE: 简单; REUSE: 执行器可能重复使用prepared statements语句;BATCH: 执行器可以重复执行语句和批量更新)  -->
        <setting name="defaultExecutorType" value="SIMPLE"/>
        <!-- 使用驼峰命名法转换字段。 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 设置本地缓存范围 session:就会有数据的共享  statement:语句范围 (这样就不会有数据的共享 ) defalut:session -->
        <setting name="localCacheScope" value="SESSION"/>
        <!-- 设置但JDBC类型为空时,某些驱动程序 要指定值,default:OTHER,插入空值时不需要指定类型 -->
        <setting name="jdbcTypeForNull" value="NULL"/>
        <setting name="logImpl" value="LOG4J" />
    </settings>

    <!-- 使用po对象当做对象的别名 -->
    <typeAliases>
        <package name="com.qtay.gls.dao.entity"/>
    </typeAliases>
</configuration>
阅读 12.3k
2 个回答

要打印sql日志需要加入sql的配置吧:

log4j.logger.com.ibatis = debug    
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = debug    
log4j.logger.com.ibatis.common.jdbc.ScriptRunner = debug    
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = debug    
log4j.logger.java.sql.Connection = debug    
log4j.logger.java.sql.Statement = debug    
log4j.logger.java.sql.PreparedStatement = debug    
log4j.logger.java.sql.ResultSet =debug 

但好像在高版的springboot里面会无效。

推荐在高版本springboot中使用log4j2,示例可以看看这里How to use Log4j 2 with Spring Boot
贴一下我的配置,
pom.xml引入:

<!-- Exclude Spring Boot's Default Logging -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- Add Log4j2 Dependency -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j2-spring.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="SYSOUT" target="SYSTEM_OUT">
            <PatternLayout patter="%d [%t] %-5p [%c] - %m%n  "/>
        </Console>

        <!-- name可以自定义,作用是在Loggers中AppenderRef中使用 -->
        <!-- fileName定义输出文件名称(当前文件) -->
        <!-- filePattern定义输出文件名称(文件满足条件后自动截断,生成历史文件) -->
        <RollingFile name="DEBUG_ROLLING_FILE"
                     fileName="~/logs/xxx/logs.logs"
                     filePattern="~/logs/xxx/logs/%d{yyyy-MM-dd}-debugs.log">
            <PatternLayout>
                <Pattern>%d [%t] %-5p [%c] - %m%n  </Pattern>
            </PatternLayout>

            <!-- 文件截断的条件,具体参考文档 -->
            <Policies>
                <TimeBasedTriggeringPolicy interval="24"/>
                <SizeBasedTriggeringPolicy size="250 MB"/>
            </Policies>
        </RollingFile>

        <!-- 同一来源的Appender可以定义多个 -->
        <RollingFile name="ERROR_ROLLING_FILE"
                     fileName="~/logs/xxx/logs/error-logs.logs"
                     filePattern="~/logs/xxx/logs/%d{yyyy-MM-dd}-error.log">
            <!-- 可以通过该参数来设置获取日志的权限 -->
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <Pattern>%d [%t] %-5p [%c] - %m%n  </Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="24"/>
                <SizeBasedTriggeringPolicy size="250 MB"/>
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="debug">
            <AppenderRef ref="SYSOUT"/>
            <AppenderRef ref="DEBUG_ROLLING_FILE"/>
            <AppenderRef ref="ERROR_ROLLING_FILE"/>
        </Root>
        <logger name="org.apache.http" level="ERROR" />
        <!-- Spring -->
        <logger name="org.springframework" level="ERROR" />
        <!-- mybatis loggers -->
        <logger name="com.ibatis" level="INFO" />
        <logger name="com.ibatis.common.jdbc.SimpleDataSource" level="DEBUG" />
        <logger name="com.ibatis.common.jdbc.ScriptRunner" level="DEBUG" />
        <logger name="com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate" level="DEBUG" />
        <!-- sql loggers -->
        <logger name="java.sql.Connection" level="DEBUG"  additivity="true"/>
        <logger name="java.sql.Statement" level="DEBUG" additivity="true" />
        <logger name="java.sql.PreparedStatement" level="=debug,stdout"  additivity="true"/>
        <logger name="java.sql.ResultSet" level="DEBUG"  additivity="true"/>
    </Loggers>
</Configuration>

你是控制台不打印日志,还是日志文件不输出日志?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题