我有使用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。也许可以将语句日志配置为与语句一起显示此值。
是"坏"解析您的日志文件?