起因:
项目上配置了mybatis打印出sql的日志,但是打印出的日志没有格式信息,无法附带traceId等等,看不出任何的上下文
很明显,sql日志的格式跟其他的不一样,这样即使其他日志加上了traceId,sql日志也没有,咋办嘞?
解决办法:
经过一番吭哧吭哧的google,找到了问题原因。原来mybatis是通过这个配置来开始日志打印并决定日志打印格式的
看到最后一行没 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
mybatis-plus:
# 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
# 如果是放在resource目录 classpath:/mapper/*Mapper.xml
mapper-locations: classpath*:/com/g3/ccdop/*/mapper/xml/*Mapper.xml
#刷新mapper 调试神器
#refresh-mapper: true
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.g3.ccdop
global-config:
#驼峰下划线转换
db-column-underline: true
#sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
#自定义填充策略接口实现
#meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
db-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 3
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
field-strategy: 2
#mp2.3+ 全局表前缀 mp_
#table-prefix: mp_
#数据库大写下划线转换
#capital-mode: true
# Sequence序列接口实现类配置
#key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
#逻辑删除配置
logic-delete-value: UNIX_TIMESTAMP()
logic-not-delete-value: 0
configuration:
#配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
map-underscore-to-camel-case: true
cache-enabled: false
#配置JdbcTypeForNull, oracle数据库必须配置
jdbc-type-for-null: 'null'
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #开启sql日志
就是最后一行这个类,决定了日志打印的格式。那好,我们点开这个类看一眼
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);
}
}
哦,好家伙,它是直接用的System打印的,怪不得没有格式。那好,我给他替换下,唉,正好,这里有个Slf4jImpl类
点击去看一眼,恩,这就是我们要的打印方式。
好,替换一下,把 ’ mybatis-plus.configuration.log-impl ’ 改为:org.apache.ibatis.logging.slf4j.Slf4jImpl
然后,我们再看日志打印。看,现在就是按照格式打印了。好了,接下来就发挥聪明才智(各种抄袭)把traceId给加上吧。