SpringBoot中使用mybatis/ibatis时日志打印sql
控制台打印mybatis/ibatis对应的sql
只需在配置文件中增加以下配置,调整自己想要的日志输出级别即可在控制台看到自己sql的打印日志。
(举例为.properties的配置格式,如果是yaml格式自行修改即可)
# 配置sql日志的打印级别(这里设置成自己mapper的所在路径)
logging.level.com.xxx.jay.cust.mapper=info
主机的日志文件中打印mybatis/ibatis对应的sql
在做好第一步配置后发现主机的日志文件(app.log或catalina.out)中还是未打印服务对应的sql。原因为配置文件中配置的mybatis打印日志的输出方式使用的是org.apache.ibatis.logging.stdout.StdOutImpl,
查看StdOutImpl类发现打印为System.out.println()控制台输出打印的,所以sql对应的日志是在主机上的console.log下面。
# 配置mybatis输出日志的方式,使用的为默认的StdOutImpl
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
可以仿照StdOutImpl自定义mybatis打印日志的输出方式,在配置文件中配置成自己的输出方式类。即可实现在主机的日志文件(app.log或catalina.out)中打印服务对应的sql,方便对线上问题的定位。
/**
* @Author: jay
* 定义mybatis的sql打印输出方式
* @Date: 2020/11/30 14:48
*/
public class SqlLogUtils implements Log{
private final java.util.logging.Logger log;
public SqlLogUtils(String clazz) {
log = Logger.getLogger(clazz);
}
@Override
public boolean isDebugEnabled() {
return true;
}
@Override
public boolean isTraceEnabled() {
return false;
}
@Override
public void error(String s, Throwable e) {
log.log(Level.SEVERE, s, e);
}
@Override
public void error(String s) {
log.log(Level.SEVERE, s);
}
@Override
public void debug(String s) {
if(s.charAt(2) == '>' || s.charAt(0) == '<'){
log.log(Level.INFO, s);
}
}
@Override
public void trace(String s) {
log.log(Level.FINER, s);
}
@Override
public void warn(String s) {
log.log(Level.WARNING, s);
}
}
# 配置mybatis输出日志的方式,指定使用自己定义的类。
mybatis.configuration.log-impl=com.xxx.jay.utils.SqlLogUtils
完成上述两步:1.定义自己想要的mybatis输出日志方式的类。 2.配置文件配置成自己新定义的类。
即可实现使用mybatis/ibatis时打印的sql在主机日志中输出