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

通过hibernate为应用程序用户提供postgres sql日志,hibernate,postgresql,logging,Hibernate,Postgresql,Logging,我使用Spring开发了一个web应用程序。要连接我的数据库,我正在使用Hibernate。我需要记录应用程序用户执行的所有SQL查询(类似于每个应用程序用户的数据库日志)。我现在所做的是非常糟糕的-我正在解析log4j日志,并将它们放入数据库中,应用程序用户是作者。我想知道是否有可能通过数据库日志系统来实现这一点?问题是,我通过名为postgres的单个用户通过Hibernate连接到ma数据库-因此,是否有可能通过Hibernate/Spring/whatever(通过Hibernate/S

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

有什么想法吗

谢谢,
Arek

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

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

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

不太容易

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


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

谢谢你的回答!不,解析我的日志文件不是件坏事,但我想知道是否有更聪明的解决方案。谢谢你的建议,但我想我会继续使用日志文件解析(麻烦少了):)