2013-05-16 32 views
0

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

任何想法?

感谢, Arek

回答

1

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

SELECT /* user John */ * from pg_tables; 

下一步是在Hibernate中查找创建语句的位置。如果你是幸运的,这仅限于两个相关的地点,一个用于选择和一个用于插入/更新/删除等

要登录信息传下进入休眠,你可以尝试的ThreadLocal变量。

不是很容易。

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

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

+0

感谢您的回答!不,这对分析我的日志文件并不坏,但我想知道是否有更聪明的解决方案。感谢您的建议,但我认为我会留在日志文件解析(少麻烦):) –