使用p6spy格式化日志输出

  P6Spy 是针对数据库访问操作的动态监测框架(为开源项目,项目首 页:www.p6spy.com)它使得数据库数据可无缝截取和操纵,而不必对现有应用程序的代码作任何修改。P6Spy 分发包包括P6Log,它是一 个可记录任何 Java 应用程序的所有JDBC事务的应用程序。其配置完成使用时,可以进行数据访问性能的监测。
     我们最需要的功能,查看sql语句,不是预编译的带问号的哦,而是真正的数据库执行的sql,更直观,更简单。
 
Step1、引入相关jar包


    

 

Step2、配置日志监控



    

 


    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
 

  

Step3、在classpath下加入配置文件 spy.properties

Step4、自定义日志输出格式

这里使用logback作为日志处理,可以通过修改spy.properties中的appender属性进行配置

 

import com.p6spy.engine.logging.Category;
import com.p6spy.engine.spy.appender.FormattedLogger;
import com.p6spy.engine.spy.appender.P6Logger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/**
* 

* LogbackLogger *

* 自定义查询日志输出 * @version 1.0 * @Date: 2016/5/6 14:24 * @since 1.0 */ public class LogbackLogger extends FormattedLogger implements P6Logger{ private static final Logger logger = LoggerFactory.getLogger("p6spy"); public String getLastEntry() { return lastEntry; } public void setLastEntry(String lastEntry) { this.lastEntry = lastEntry; } protected String lastEntry; @Override public void logSQL(int connectionId, String s, long l, Category category, String s1,String sql) { if (!"resultset".equals(category)) { logger.info(trim(sql)); } } @Override public void logException(Exception e) { logger.error(e.getMessage(),e); } @Override public void logText(String s) { logger.info(s); this.setLastEntry(s); } @Override public boolean isCategoryEnabled(Category category) { return true; } private String trim(String sql){ StringBuilder sb = new StringBuilder("\r\n"); sb.append(sql.replaceAll("\n|\r|\t|' '"," ")); return sb.toString(); } } 

打印结果:

使用p6spy格式化日志输出_第1张图片

你可能感兴趣的:(使用p6spy格式化日志输出)