springboot项目mybatis日志自定义设置无法生效,就是无法设置日志级别,无法对java.sql.PreparedStatement
、java.sql.Connection
等进行设置。
翻了spring和mybatis官网以及几十篇文章都没找到一个好使的方法,大概是项目中有什么奇怪的冲突的原因吧,不准备找了,直接自定义日志搞起。
yml中的mybatis配置
mybatis:
mapper-locations: classpath:/mapper/*/*xml
configuration:
#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
log-impl: testMavenWeb.log.CustomLog
jdbcTypeForNull: VARCHAR
CustomLog是实现org.apache.ibatis.logging.Log接口的自定义日志类。
先来复习一下日志类时这么运行的,下面是CustomLog代码
import org.apache.ibatis.logging.Log;
public class CustomLog implements Log {
public CustomLog(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.out.println("mylog error");
System.err.println(s);
}
@Override
public void debug(String s) {
System.out.println("mylog debug");
System.out.println(s);
}
@Override
public void trace(String s) {
System.out.println("mylog trace");
System.out.println(s);
}
@Override
public void warn(String s) {
System.out.println("mylog warn");
System.out.println(s);
}
}
sql代码
<select id="testQueryList" resultType="java.util.HashMap">
<![CDATA[
select level || #{data} lv from dual connect by level <= 20
]]>
</select>
现在我后台的日志是这样的
mylog debug
Creating a new SqlSession
mylog debug
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26a8b664] was not registered for synchronization because synchronization is not active
mylog debug
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@22972669] will not be managed by Spring
mylog debug
==> Preparing: select level || ? lv from dual connect by level <= 20
mylog debug
==> Parameters: ddd(String)
mylog trace
<== Columns: LV
mylog trace
<== Row: 1ddd
mylog trace
<== Row: 2ddd
mylog trace
<== Row: 3ddd
mylog trace
<== Row: 4ddd
mylog trace
<== Row: 5ddd
mylog trace
<== Row: 6ddd
mylog trace
<== Row: 7ddd
mylog trace
<== Row: 8ddd
mylog trace
<== Row: 9ddd
mylog trace
<== Row: 10ddd
mylog trace
<== Row: 11ddd
mylog trace
<== Row: 12ddd
mylog trace
<== Row: 13ddd
mylog trace
<== Row: 14ddd
mylog trace
<== Row: 15ddd
mylog trace
<== Row: 16ddd
mylog trace
<== Row: 17ddd
mylog trace
<== Row: 18ddd
mylog trace
<== Row: 19ddd
mylog trace
<== Row: 20ddd
mylog debug
<== Total: 20
mylog debug
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@26a8b664]
剩下的就简单了,比如我如果想要屏蔽ResultSet
,则只需要屏蔽trace
中的代码即可
@Override
public void trace(String s) {
//System.out.println("mylog trace");
//System.out.println(s);
}
现在这个日志设置已经够用,日后需要时再做完善吧。