【问题标题】:postgres sql logs for application users via hibernate通过 hibernate 为应用程序用户提供 postgresql 日志
【发布时间】:2013-05-16 13:52:54
【问题描述】:

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

有什么想法吗?

谢谢, 阿雷克

【问题讨论】:

    标签: hibernate postgresql logging


    【解决方案1】:

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

    SELECT /* user John */ * from pg_tables;
    

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

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

    并不容易。

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

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

    【讨论】:

    • 感谢您的回答!不,解析我的日志文件并不是“坏事”,但我想知道是否有更聪明的解决方案。感谢您的建议,但我想我会继续解析日志文件(减少麻烦):)
    猜你喜欢
    • 2022-12-19
    • 2018-04-24
    • 2020-10-18
    • 2014-08-30
    • 2013-06-13
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多