控制台可以输出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>