0

我有使用Spring. 要连接我正在使用的数据库Hibernate。我需要记录应用程序用户执行的所有 SQL 查询(类似于每个应用程序用户的数据库日志)。我现在正在做的事情非常糟糕 - 我正在解析 log4j 日志并将它们放入数据库中,应用程序用户作为作者。我想知道是否有可能通过数据库日志记录系统来实现这一点?问题是我正在通过Hibernate名为postgres的单个用户连接到 ma 数据库- 所以是否有可能制造一些魔法并告诉(通过 Hibernate/Spring/whatever)数据库日志记录系统该 SQL 正在使用登录 XXX 执行用户(不是登录postgres的用户)? 无需通过 Web 应用程序浏览此日志 - 使用数据库日志系统并使用本机工具(如 )浏览它就足够了pgAdmin

有任何想法吗?

谢谢, 阿雷克

4

1 回答 1

1

如果打开了语句记录,则将记录完整的语句(即包括注释)。

SELECT /* user John */ * from pg_tables;

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

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

真的不容易。

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

解析你的日志文件有那么“糟糕”吗?

于 2013-05-16T16:06:34.887 回答