Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理:
- SLF4J
- Apache Commons Logging
- Log4j 2
- Log4j
- JDK logging
MyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具。它会使用第一个查找得到的工具(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。
不少应用服务器(如 Tomcat 和 WebShpere)的类路径中已经包含 Commons Logging,所以在这种配置环境下的 MyBatis 会把它作为日志工具,记住这点非常重要。这将意味着,在诸如 WebSphere 的环境中,它提供了 Commons Logging 的私有实现,你的 Log4J 配置将被忽略。
引入jar包
log4j-1.2.17.jar 可以到maven中央仓库下载 https://mvnrepository.com/
mybatis配置文件配置日志
<configuration>
<settings>
...
<!--logImpl 可选值:
SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING -->
<setting name="logImpl" value="LOG4J"/>
...
</settings>
</configuration>
logImpl
logImpl 可选的值有:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING,或者是实现了接口 org.apache.ibatis.logging.Log 的,且构造方法是以字符串为参数的类的完全限定名。(译者注:可以参考org.apache.ibatis.logging.slf4j.Slf4jImpl.java的实现)
如果你决定要调用以上某个方法,请在调用其它 MyBatis 方法之前调用它。
日志配置文件 log4j.properties
- log4j 默认使用properties文件做配置,注意文件名固定为 log4j.properties 。也可以采用xml文件进行配置。
例如我把文件名改为 log.properties,则控制台报如下错误
log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
- 注意配置文件要放在resource路径下
关于log配置的详细设置,可以查阅https://blog.youkuaiyun.com/eagleuniversityeye/article/details/80582140 写的非常详细。偷偷感谢一下大佬,这篇文章帮了很多忙。
# 配置根Logger log4j.rootLogger = level,appenderName1,appenderName2, .....
# level是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,优先级从左至右
# appenderName 输出源名称--指定输出位置,可以同时指定多个
log4j.rootLogger=DEBUG,CONSOLE
# Log4j提供的五种输出源
# ConsoleAppender(控制台)
# FileAppender(文件)
# DailyRollingFileAppender(每天产生一个日志文件)
# RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
# WriterAppender(将日志信息以流格式发送到任意指定的地方)
#使用 log4j 提供的 ConsoleAppender 日志信息输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
# Threshold 指定日志消息的输出最低层次
log4j.appender.CONSOLE.Threshold=DEBUG
# Target 指定输出位置 默认:System.out 输出到控制台
log4j.appender.CONSOLE.Target=System.out
# Encoding 指定输出的消息编码
log4j.appender.CONSOLE.Encoding=utf-8
# 默认值是true,意谓着所有的消息都会被立即输出
log4j.appender.ImmediateFlush=true
# log4j提供的layout
# HTMLLayout(以HTML表格形式布局),{1.LocationInfo=true:默认值是false,输出java文件名称和行号 2.Title=my app file:默认值是 Log4J Log Messages}
# PatternLayout(可以灵活地指定布局模式),{ConversionPattern=%m%n:指定怎样格式化指定的消息。}
# SimpleLayout(包含日志信息的级别和信息字符串),{}
# TTCCLayout(包含日志产生的时间、线程、类别等等信息)
# layout布局配置 使用 PatternLayout
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH:mm:ss}][%C] - %m%n
试运行
指定打印层级为debug的话,有很多无用的信息。可以进行其他的配置来对sql进行打印,这里不多赘述。