Postgres通过hibernate记录应用程序用户的SQL日志



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

任何想法?

谢谢,Arek

如果语句日志被打开,完整的语句(这意味着包括注释)将被记录。

SELECT /* user John */ * from pg_tables;

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

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

不太容易。

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

是"坏"解析您的日志文件?

最新更新