呼市达内IT教育学校

试听课 + 活动课
填写信息优先获取试听课

位置:学校首页 > 学校动态>呼市学习编程多少钱

呼市学习编程多少钱

  Java网络项目调试时打印sql信息?

  在日常开发过程中调试是十分频繁的事情,辅助调试的重要手段就是日志。除了业务日志,很多时候破解惨案的入口都在数据库查询上,因此被执行SQL的日志也很重要。

  线上环境由于sql量极大,并不会启用sql的打印,否则不仅日志文件打开一看全是垃圾SQL,而且日志文件很快就占满了磁盘。但是测试时如果能记录sql对于排错就会是很方便的事情。

  有的公司配置了sql的日志框架,将日志级别设在info以下,并在测试环境打印其级别日志。线上只要设置日志级别高一点就可避免日志输出。

  但是如果公司没提供这样的支持,任何环境都不能输出sql该怎么办?

  这里就介绍两种常用的日志打印方案:p6spy和log4jdbc。

  p6spy

  要使用p6spy,需要先引入其依赖。它的maven坐标是

<dependency><groupId>p6spy</groupId><artifactId>p6spy</artifactId><version>3.0.0</version></dependency>

  然后在数据源的配置中修改驱动类和连接类型:

spring.datasource.driverClassName=com.p6spy.engine.spy.P6SpyDriverspring.datasource.url=jdbc:p6spy:mysql://localhost:3306/table_name

  这样sql就能输出了,并且参数是拼接好的,而不是分别输出PreStatement和参数数组。

  默认情况下sql是输出到spy.log中的,如果想输出到控制台和程序日志中,可以在类路径下(比如src/main/resources)新建spy.properties文件,内容如下:

  module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory#使用日志系统记录sqlappender=com.p6spy.engine.spy.appender.Slf4JLogger##配置记录Log例外excludecategories=info,debug,result,batc,resultset#设置使用p6spy driver来做代理deregisterdrivers=true#日期格式dateformat=yyyy-MM-dd HH:mm:ss#实际驱动driverlist=com.mysql.jdbc.Driver#日志格式logMessageFormat=com.p6spy.engine.spy.appender.SingleLineFormat

  输出的日志格式可能让你不满意,可以自己创建一个模式类实现MessageFormattingStrategy这个接口,选择方法中的参数定义格式即可。记得把spy.properties中的logMessageFormat改成自定义模式类。

  更复杂的配置可以继续修改spy.properties中的类,只要提供了合适的替换就行,通常都是找到默认类,看它实现了哪个接口,自己实现一个新的。另外p6spy还可以监控慢sql,增加如下配置即可:

  #是否开启慢SQL记录outagedetection=true#慢SQL记录标准秒outagedetectioninterval=2

  log4jdbc

  log4jdbc在sourceforge上已经多年没有更新了,但是不妨碍我们使用:

<dependency><groupId>com.googlecode.log4jdbc</groupId><artifactId>log4jdbc</artifactId><version>1.2</version></dependency>

  同样的,也要修改数据源配置:

spring.datasource.driverClassName=net.sf.log4jdbc.DriverSpyspring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/table_name

  log4jdbc是特意为了整合日志的,所以直接就输出到日志文件了。以log4j为例,在日志配置文件中增加log4j.logger.jdbc.sqlonly=OFFlog4j.logger.jdbc.sqltiming=INFOlog4j.logger.jdbc.audit=OFFlog4j.logger.jdbc.resultset=OFFlog4j.logger.jdbc.connection=OFF

  现在sql就可以打印出来了,当然也是可执行的sql,并且sql的执行时长也打印了出来。

  希望今天的内容帮到大家

领取试听课
温馨提示:为不影响您的学业,来校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
版权所有:搜学搜课(www.soxsok.com) 技术支持:搜学搜课网