参考文档
https://www.mybatis.org/mybatis-3/zh/logging.html
项目需要引用log4j,所有配置文件与log4j一致。
package connTest.conn;
import org.apache.log4j.Logger;
import org.apache.log4j.Level;
public class NbLog implements org.apache.ibatis.logging.Log {
private static final String FQCN = NbLog.class.getName();
private Logger log;
private static String preparingTemp;
public NbLog(String clazz) {
this.log = Logger.getLogger(clazz);
}
public boolean isDebugEnabled() {
return this.log.isDebugEnabled();
}
public boolean isTraceEnabled() {
return this.log.isTraceEnabled();
}
public void error(String s, Throwable e) {
this.log.log(FQCN, Level.ERROR, s, e);
}
public void error(String s) {
this.log.log(FQCN, Level.ERROR, s, null);
}
public void debug(String s) {
this.log.log(FQCN, Level.DEBUG, s, null);
if(s != null && s.contains("Preparing")){
preparingTemp = s;
return;
}
if(s != null && s.contains("Parameters")){
String preparing = preparingTemp.substring("==> Preparing: ".length());
preparingTemp = null;
String parameters = s.substring("==> Parameters: ".length());
if(preparing.contains(" ?")){
formatLog(preparing, parameters);
return;
}
}
}
private void formatLog(String preparing, String parameters){
String[] params = parameters.split(", ");
for(String param: params){
if(param != null && param.length() != 0 && preparing != null && preparing.length() != 0 && param.indexOf("(") != -1){
preparing = preparing.replaceFirst(" \\?", " '" + param.substring(0, param.indexOf("(")) + "'");
}else if(param != null && param.length() != 0 && preparing != null && preparing.length() != 0){
preparing = preparing.replaceFirst(" \\?", " null");
}
}
System.out.println(preparing);
}
public void trace(String s) {
this.log.log(FQCN, Level.TRACE, s, null);
}
public void warn(String s) {
this.log.log(FQCN, Level.WARN, s, null);
}
}
加入日志配置
<configuration>
<settings>
<!--
<setting name="logImpl" value="LOG4J"/>
-->
<setting name="logImpl" value="connTest.conn.NbLog"/>
</settings>
- 目前存在的问题
正则方法比较简陋,无法应对所有情况。
多用户下可能会出错,只能在本地测试时使用。