最近在搭建完一个测试项目之后, 发现控制台并没有打印SQL日志。
原因是因为我没有在mybatis的配置中, 配置日志的实现类,只需要在yml或properties配置文件中的mybatis配置中添加日志实现的配置,并且配置控制台打印的日志实现类StdOutImpl:
mybatis:
mapper-locations: classpath:mappers/*xml
configuration:
# 控制台打印SQL
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 日志打印SQL , 需要将mybatis的日志输出级别改成debug
# log-impl: org.apache.ibatis.logging.log4j2.Log4j2Impl
logging:
# All < Trace < Debug < Info < Warn < Error < Fatal < OFF
level:
# 所有日志的输出级别
root: info
# 更细的控制
# org.mybatis: debug
StdOutImpl:
public class StdOutImpl implements Log {
public StdOutImpl(String clazz) {
// Do Nothing
}
@Override
public boolean isDebugEnabled() {
return true;
}
@Override
public boolean isTraceEnabled() {
return true;
}
@Override
public void error(String s, Throwable e) {
System.err.println(s);
e.printStackTrace(System.err);
}
@Override
public void error(String s) {
System.err.println(s);
}
@Override
public void debug(String s) {
System.out.println(s);
}
@Override
public void trace(String s) {
System.out.println(s);
}
@Override
public void warn(String s) {
System.out.println(s);
}
}
可以看到, StdOutImpl 是用的控制台打印日志。
若需要将mybatis的日志打印到日志文件 , 则需要将上送的mybatis配置项 log-impl 改成其它的实现类(因为目前项目中日志我用的log4j2,所以配了对应的实现类 Log4j2Impl):
同时,若需要在日志文件中打印SQL,可配置输出mybatis的日志为debug,SQL日志是debug级别