我使用Spring
获得了网络应用程序。要连接我的数据库,我正在使用Hibernate
。我需要记录应用程序用户执行的所有SQL查询(类似于每个应用程序用户的数据库日志)。我现在正在做的非常糟糕 - 我正在解析log4j日志并将它们作为作者以应用程序用户身份放入数据库。我想知道是否有可能通过数据库日志系统实现这一目标?问题是我通过Hibernate
通过名为 postgres 的单个用户连接到ma数据库 - 所以是否有可能做出一些魔术并告诉(通过Hibernate / Spring /无论如何)数据库日志记录 - 这个SQL正在执行用户登录XXX的系统(不是用户登录 postgres )?没有必要通过Web应用程序浏览这些日志 - 使用数据库日志系统并使用本机工具(如pgAdmin
)进行浏览就足够了。
有什么想法吗?
谢谢, Arek
答案 0 :(得分:1)
如果启用了语句记录,则将记录完整语句(表示包括注释)。
SELECT /* user John */ * from pg_tables;
下一步是在Hibernate中找到创建语句的位置。如果幸运的话,这仅限于两个相关位置,一个用于SELECT,一个用于插入/更新/删除等。
要将登录信息传递给Hibernate,您可以尝试 ThreadLocal 变量。
不是很容易。
另一个想法:PostgreSql 9.1支持“将application_name设置为...”以及java.sql.Connection.setClientInfo。也许语句日志记录可以配置为与语句一起显示此值。
解析日志文件是“坏”吗?