通过hibernate为应用程序用户提供postgresql日志

时间:2013-05-16 13:52:54

标签: hibernate postgresql logging

我使用Spring获得了网络应用程序。要连接我的数据库,我正在使用Hibernate。我需要记录应用程序用户执行的所有SQL查询(类似于每个应用程序用户的数据库日志)。我现在正在做的非常糟糕 - 我正在解析log4j日志并将它们作为作者以应用程序用户身份放入数据库。我想知道是否有可能通过数据库日志系统实现这一目标?问题是我通过Hibernate通过名为 postgres 的单个用户连接到ma数据库 - 所以是否有可能做出一些魔术并告诉(通过Hibernate / Spring /无论如何)数据库日志记录 - 这个SQL正在执行用户登录XXX的系统(不是用户登录 postgres )?没有必要通过Web应用程序浏览这些日志 - 使用数据库日志系统并使用本机工具(如pgAdmin)进行浏览就足够了。

有什么想法吗?

谢谢, Arek

1 个答案:

答案 0 :(得分:1)

如果启用了语句记录,则将记录完整语句(表示包括注释)。

SELECT /* user John */ * from pg_tables;

下一步是在Hibernate中找到创建语句的位置。如果幸运的话,这仅限于两个相关位置,一个用于SELECT,一个用于插入/更新/删除等。

要将登录信息传递给Hibernate,您可以尝试 ThreadLocal 变量。

不是很容易。

另一个想法:PostgreSql 9.1支持“将application_name设置为...”以及java.sql.Connection.setClientInfo。也许语句日志记录可以配置为与语句一起显示此值。

解析日志文件是“坏”吗?