Java 监视JDBC调用

Java 监视JDBC调用,java,postgresql,jdbc,monitoring,Java,Postgresql,Jdbc,Monitoring,我有一个Java应用程序,它连接到Postgres DB并发出一些SQL语句。我希望监视连接,以获得有关每个查询执行速度的统计信息。我尝试过使用JAMon(),但并不真正理解它,并且发现文档非常缺乏 以下是我打开连接的方式: Class.forName("com.jamonapi.proxy.JAMonDriver"); con = DriverManager.getConnection("jdbc:jamon:postgresql://localhost:5432/myDB?jamonreal

我有一个Java应用程序,它连接到Postgres DB并发出一些SQL语句。我希望监视连接,以获得有关每个查询执行速度的统计信息。我尝试过使用JAMon(),但并不真正理解它,并且发现文档非常缺乏

以下是我打开连接的方式:

Class.forName("com.jamonapi.proxy.JAMonDriver");
con = DriverManager.getConnection("jdbc:jamon:postgresql://localhost:5432/myDB?jamonrealdriver=org.postgresql.Driver", "user", "pw");
不过我没发现有什么不同。一切正常,所以我想这至少没有配置错误,但我没有日志或任何东西。还有什么我必须安排的吗

我还尝试添加这一行,但也没有任何效果:

con = MonProxyFactory.monitor(con);
因此,基本上,我要寻找的是一个完整的、易于理解的初学者指南,可以使用JAMon(或者任何其他监控工具,只要它易于设置)监控JDBC调用

注意:完成的程序应该在我没有无限制访问权限的远程数据库上运行,这意味着我无法编辑postgresql.conf或访问数据库的日志文件。这意味着我无法使用该解决方案

我还尝试使用JDbMonitor(),我成功地将其设置为监视器成功连接的点(它从Java应用程序中找到了我的open DB连接),但它从未显示/记录任何查询。所以,给那个显示器一点帮助也会很好:D

编辑:log4jdbc()是一个可行的选项吗?最新版本说它只适用于Java 1.7,所以我不确定它是否能工作,但在这里等待答案时会尝试一下…

可以使用P6Spy吗


一旦与应用程序正确集成,它将生成一个全面的日志。

我已经广泛使用了Log4jdbc,它工作得非常好。您只需要替换jdbc连接字符串,并将原始的.jar驱动程序文件放在类路径中,它就会像一个符咒一样工作。如果您将SL4FJ用作日志,那么facade是必须具备的

你知道,Postgres也有这方面的工具。@Kayaman我忘了提到这一点,当我目前正在处理本地数据库时,该程序稍后需要在远程数据库上运行,我无法访问日志文件或编辑postgresql.conf。我将更新问题。您可以在DAO\Service方法上添加切入点(使用aspectj或spring aop),并记录整个方法的执行时间(包括查询执行时间和获取结果的时间)。@user1516873我当前调用Instant start=Instant.now();在任何方法的开头和日志持续时间.between(start,Instant.now());之后,但我不认为这是最好的方法。另外,它没有包含足够的详细信息(例如:它没有拆分queryexec和fetch)。也许我会遇到一个限制,但现在,这是最好的,最简单的解决方案,谢谢!实际上,我遇到了一个限制:我正在将一个文件作为BLOB插入DB,但是Spy只捕获最后的INSERT命令(“INSERT into test(filename,file)VALUES('test.pdf',27142)”)。。。所有实际创建和填充LOB的命令都不会被记录!还有什么方法可以启用这些日志记录吗?我遵循了上的教程(尽管我使用的是NetBeans,但不管怎样),并不断得到“log4j:WARN无法为logger找到任何附加器(myProj.PostgresCon)。”。我一般理解警告(没有为此类定义appender),但不理解如何将appender从我的log4j.xml文件添加到我的类记录器中。发生这种情况是因为您使用log4j作为日志框架。Log4jdbc使用SL4FJ。您应该从类路径中替换log4jjar并添加。然后,您只需创建一个类路径根目录下的文件(如果您使用的是Maven,则为src/main/resource)。2) 有时我需要将连接转换为PGConnection(用于LOB支持),但会出现以下错误:“net.sf.log4jdbc.ConnectionSpy无法转换为org.postgresql.PGConnection”。。。有没有办法解决这个问题?关于登录到文件,您必须设置一个。显然,您可以从调用getRealConnection()的ConnectionSpy对象中打开连接,好的,完全错过了getRealConnection(),很抱歉,但是如果我调用它,它显然不会记录任何LOB处理查询。另外,我在logback.xml中定义了FileAppender(在链接中的tut之后),但它仍然没有登录到文件(ConsoleAppender工作正常)。