console控制台有sql语句输出但log文件中不输出sql解决方式

控制台可以输出sql,但是log文件中无sql输出,如何解决?

把握两点就可以输出:

第一点,mybatis 本身的logImpl配置

这个参数是配置mybatis所使用的日志框架,取值范围如下:

  • SLF4J

  • LOG4J #表示使用LOG4J作为日志框架的实现

  • LOG4J2

  • JDK_LOGGING

  • COMMONS_LOGGING

  • STDOUT_LOGGING #表示输出到控制台

  • NO_LOGGING

这个参数也可以在mybatis-plus中配置,mybatis-plus中的取值差不多也是这些,只是要在前面加org.apache.ibatis.logging,比如对于STDOUT_LOGGING,在mybatis-plus中配置如下:

如果不配置log-impl,将自动识别。

我之前一直不能输出,就是因为将log-impl配置成了org.apache.ibatis.logging.stdout.StdOutImpl,所以mybatis输出的日志就只会输出到控制台,而不输出到日志文件中

第二点,将mapper接口所在的包日志级别设为DEBUG

我用的logback,我的mapper接口放在 com.xxx.dao包内,因此配置如下:

<logger name="com.xxx.dao" level="DEBUG" />

把握以上两点,logback就可以输出sql到log文件中。

最后附上logback.xml整体配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">
    <property name="CATALINA_BASE" value="/logs"></property>

    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder charset="UTF-8">
            <!-- 输出日志记录格式 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 文件输出,每天产生一个文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 输出文件路径+文件名 -->
            <fileNamePattern>${CATALINA_BASE}/xxx.%d{yyyyMMdd}.log</fileNamePattern>
            <!-- 保存30天的日志 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder charset="UTF-8">
            <!-- 输出日志记录格式 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>


    <!-- 设置日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>

    <logger name="com.xxx.dao" level="DEBUG" />
</configuration>

在Spring Boot应用,可以通过在application.yml文件配置,实现打印JDBC的SQL语句的功能,并且格式化输出控制台。 具体的实现步骤如下: 1. 在application.yml文件,配置以下信息: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: root driver-class-name: com.mysql.jdbc.Driver # 打印SQL语句 # 可选的值:NONE、CONSOLELOG_FILE、LOG_FILE_AND_CONSOLE # 默认值:NONE datasource: type: com.alibaba.druid.pool.DruidDataSource # 配置Druid数据源,可以省略 druid: initial-size: 5 max-active: 20 min-idle: 5 max-wait: 60000 pool-prepared-statements: true max-pool-prepared-statement-per-connection-size: 20 validation-query: SELECT 1 test-on-borrow: true test-while-idle: true time-between-eviction-runs-millis: 60000 min-evictable-idle-time-millis: 300000 filters: stat,wall,log4j connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 # 配置日志级别为DEBUG,打印SQL语句 # 可以使用logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG代替 logging: level: org: springframework: jdbc: core: JdbcTemplate: DEBUG # 配置输出控制台,并格式化输出SQL语句 pattern: console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" appender: console: target: SYSTEM_OUT encoder: pattern: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" ``` 其logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG可以在application.yml配置,也可以在log4jlogback等日志框架配置。 2. 在代码使用JdbcTemplate时,即可在控制台看到打印SQL语句,例如: ```java @Autowired private JdbcTemplate jdbcTemplate; public void query() { List<Map<String, Object>> result = jdbcTemplate.queryForList("SELECT * FROM user"); //... } ``` 在控制台打印出格式化后的SQL语句,例如: ```java 2021-07-28 11:08:59.887 [main] DEBUG o.s.j.c.JdbcTemplate - Executing SQL query [SELECT * FROM user] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值