首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JDBC启用MySQL常规查询日志

问使用JDBC启用MySQL常规查询日志
EN

Stack Overflow用户
提问于 2012-06-06 02:56:53
回答 6查看 23.5K关注 0票数 18

有没有办法通过JDBC启用MySQL通用查询日志记录?我通过搜索找到的最接近的东西是通过JDBC (http://dev.mysql.com/doc/refman/5.5/en/connector-j-reference-configuration-properties.html)记录慢查询的能力。也许我应该这样做,并将慢查询阈值设置为0ms?

我希望通过MySQL以人类可读的格式记录所有查询,并指定日志文件应该写入的位置。我知道我会受到性能的影响,但我的应用程序只有一个用户,而且非常简单,如果性能受到明显的影响,我会感到惊讶。不管怎样,我都想试一试看看。

我相信我的另一个选择是打开二进制日志,并使用mysqlbinlog将二进制日志转换为人类可读的格式,但听起来通用查询日志将提供一种更简单的方法来获取我想要的内容。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-07-25 06:52:50

我最终找到了一种变通办法。我通过Java启用MySQL通用查询日志,方法是在运行时使用以下MySQL查询修改SQL全局系统变量。

代码语言:javascript
复制
SET GLOBAL log_output="FILE"
SET GLOBAL general_log_file="Path/File"
SET GLOBAL general_log='ON'

我建议在general_log_file路径中使用正斜杠。我无法使用反斜杠,即使在Windows环境中也是如此。

我在运行时使用以下SQL查询禁用一般查询日志记录。

代码语言:javascript
复制
SET GLOBAL general_log='OFF'
票数 3
EN

Stack Overflow用户

发布于 2012-10-23 15:30:55

可以在JDBC URL中启用日志记录,如下所示:

代码语言:javascript
复制
jdbc:mysql://host/db?logger=com.mysql.jdbc.log.Log4JLogger&profileSQL=true

还可以使用其他日志记录后端(CommonsLogger、Slf4jLogger、JDK14Logger)。我认为,由于许可问题,直接Log4J日志记录在某个时候被删除了,因此它可能无法与您的JDBC驱动程序版本一起工作。

当然,您的类路径中需要相关的日志库的JAR和一个配置文件(log4j.properties)。我会将根级别设置为首先跟踪,以查看发生了什么,并在看到正在记录的内容后,按日志级别和类别对其进行更严格的限制。

进一步阅读:

HTH

票数 33
EN

Stack Overflow用户

发布于 2016-01-14 10:19:08

将'logger‘和'profileSQL’添加到jdbc url:

代码语言:javascript
复制
&logger=com.mysql.jdbc.log.Slf4JLogger&profileSQL=true

然后,您将获得下面的SQL语句:

代码语言:javascript
复制
2016-01-14 10:09:43  INFO MySQL - FETCH created: Thu Jan 14 10:09:43 CST 2016 duration: 1 connection: 19130945 statement: 999 resultset: 0
2016-01-14 10:09:43  INFO MySQL - QUERY created: Thu Jan 14 10:09:43 CST 2016 duration: 1 connection: 19130945 statement: 999 resultset: 0 message: SET sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES'
2016-01-14 10:09:43  INFO MySQL - FETCH created: Thu Jan 14 10:09:43 CST 2016 duration: 1 connection: 19130945 statement: 999 resultset: 0
2016-01-14 10:09:43  INFO MySQL - QUERY created: Thu Jan 14 10:09:43 CST 2016 duration: 2 connection: 19130945 statement: 13 resultset: 17 message: select 1
2016-01-14 10:09:43  INFO MySQL - FETCH created: Thu Jan 14 10:09:43 CST 2016 duration: 0 connection: 19130945 statement: 13 resultset: 17
2016-01-14 10:09:43  INFO MySQL - QUERY created: Thu Jan 14 10:09:43 CST 2016 duration: 1 connection: 19130945 statement: 15 resultset: 18 message: select @@session.tx_read_only
2016-01-14 10:09:43  INFO MySQL - FETCH created: Thu Jan 14 10:09:43 CST 2016 duration: 0 connection: 19130945 statement: 15 resultset: 18
2016-01-14 10:09:43  INFO MySQL - QUERY created: Thu Jan 14 10:09:43 CST 2016 duration: 2 connection: 19130945 statement: 14 resultset: 0 message: update sequence set seq=seq+incr where name='demo' and seq=4602
2016-01-14 10:09:43  INFO MySQL - FETCH created: Thu Jan 14 10:09:43 CST 2016 duration: 0 connection: 19130945 statement: 14 resultset: 0

默认记录器为:

代码语言:javascript
复制
com.mysql.jdbc.log.StandardLogger

Mysql jdbc属性列表:https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10903206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档