如何解决p6spy日志记录sql语句重复的问题

         最近运维的兄弟一直报怨日志量陡增,测试反应我们的sql语句打印了两遍,我们的负责人说是p6spy的自有的机制,若更改需要研究下,于是问题就到了我这里。

                首先关注点为什么打印两次?实际上第一次是parpared sql,也就是预编译语句,第二次就是实际执行的语句了。

                那么既然两次,我们应该可以配置只打印一次,后来发现并可行。我们可以定制:只输出带参数的sql语句。

               首先我们必须知道p6spy存在两种日志模式logging model

                      1.MultiLineFormat  多行

                      2.SingleLineFormat  单行 

               以上两种方式的源码对于我们定制日志有很大启发:

               以下是我采用单行sql输出的方式

               

package com.zone.common.p6spylog;

import com.p6spy.engine.common.P6Util;
import com.p6spy.engine.spy.appender.MessageFormattingStrategy;

/**
 * 解决输出两次sql的问题
 */
public class CustomSqlFormat implements MessageFormattingStrategy {
	@Override
	public String formatMessage(final int connectionId, final String now, final long elapsed, final String category,
			final String prepared, final String sql) {
		return now + "|" + elapsed + "|" + category + "|connection " + connectionId //+ "|" + P6Util.singleLine(prepared)
				+ "|" + P6Util.singleLine(sql);
	}
}


然后配置修改spy.properties配置logMessageFormat为以上重新实现类

#class to use for formatting log messages (default is: com.p6spy.engine.spy.appender.SingleLineFormat)
#logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat
logMessageFormat=com.zone.common.p6spylog.CustomSqlFormat

测试通过。

             

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值