引用博客: https://www.cnblogs.com/grasp/p/12354955.html
Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:
SLF4J
Apache Commons Logging
Log4j 2
Log4j
JDK logging
具体选择哪个日志实现工具由MyBatis的内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。
标准日志实现
指定 MyBatis 应该使用哪个日志记录实现。如果此设置不存在,则会自动发现日志记录实现。
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
测试,可以看到控制台有大量的输出!我们可以通过这些输出来判断程序到底哪里出了Bug
logback
在applaction.yml中配置mybatis-plus的日志输出
//这里的log-impl实现是stdoutImpl。它只能输出到控制台窗口单不能写入文件。
//要想写入文件,需要配合日志框架进行配置,我这里使用的日志框架是logback,
//所以我这边修改了log-impl的实现类为org.apache.ibatis.logging.slf4j.Slf4jImpl并定义了日志级别
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
//这里的XX自定义你项目的包路径。具体什么意思有待开发。目前来看是必须要配置的项
logging:
level:
com.XXX: debug
值得注意的是:
log-impl指定的值为org.apache.ibatis.logging.Log接口的某个实现类,是设置打印mybatis的日志实现
如果配置为org.apache.ibatis.logging.stdout.StdOutImpl就只会在控制台窗口打印,不会记录到日志文件。如果需要保存打印的SQL到文件就不能设置为StdOutImpl,可以设置为Slf4jImpl,也可以不设置。然后对应接口所在包设置logback对应包的日志等级
# 日志配置
logging:
level:
com.XXX: debug
org.springframework: warn
org.apache.ibatis.logging: debug
这样就可以把mybatis的打印内容,保存到文件中了。
以上的logging级别配置如果还是不行的话,就删除这个日志级别的配置,在logbak-spring.xml中配置你的sql语句输出appender
<appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${PROJECT_NAME}/sql.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/sql.%i.zip</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>2</MaxHistory>
<!--日志文件最大的大小-->
<MaxFileSize>100MB</MaxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式化输出: %d: 日期; %-5level: 级别从左显示5个字符宽度; %thread: 线程名; %logger: 类名; %M: 方法名; %line: 行号; %msg: 日志消息; %n: 换行符 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- myibatis log configure; nmae为maper文件对应的包路径,additivity代表是否把当前日志信息向上
传递(<root>是它的上级),默认是true;这里设置为false,就不会把日志信息
向root传入;level设置的级别为DEBUG,mabatis的日志级别默认为DEBUG级别;
-->
<logger name="com.XXX.mapper" level="DEBUG" additivity="false">
<appender-ref ref="SQL_FILE"/>
</logger>
注意:如果在logback-spring.xml文件中通过下面的方式配置的时候:
<springProfile name="dev,test,prod">
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="logFile"/>
</root>
</springProfile>
需要在yml配置文件中添加:
spring:
profiles:
active: dev
不然在控制台或者文件中是空白的