【问题标题】:How to log user operations in a web application?如何在 Web 应用程序中记录用户操作?
【发布时间】:2010-10-22 17:04:58
【问题描述】:

我的应用环境:web-based, Spring MVC+Security, Hibernate, MySQL(InnoDB)

我正在开发一个通过 Web 界面操作的小型数据库应用程序。有特定和已知的用户处理存储的数据。现在我需要跟踪用户在数据库上执行的每个创建/更新/删除操作,并从中生成简单的“类似列表”的报告。截至目前,我正在考虑一个“日志”表(列:userId + timestamp + description 等)。我猜想在这个表中插入日志行的任何 C(R)UD 操作都会触发一个方面。但我不确定这是否应该这样做。

我也知道通常的 MySQL 日志以及 log4j。至于日志文件,我可能需要比 MySQL 可用的信息更多的信息。 Log4j 可能是一个解决方案,但我看不到它是如何写入 MySQL 表的。此外,我希望在我的日志表中保留一些关联(例如用户 ID),以让数据库进行基本过滤等。对此表示赞赏。

你会推荐什么? Hibernate/Spring 中是否有任何内置支持,或者 log4j 是正确的方法?

谢谢!

【问题讨论】:

    标签: mysql hibernate logging report trace


    【解决方案1】:
    1. Lo​​g4j 是模块化的,如果您愿意,您可以编写自己的后端,将日志写入数据库;事实上,它甚至带有一个开箱即用的JDBC appender,不过请注意那里的红色大警告。
    2. 对于 Hibernate,您可能可以在 interceptors and events 上构建一些东西来跟踪所有修改并将它们记录到一个特殊的审计表中。

    【讨论】:

    • @1 我一定会调查的。我还发现一个页面展示了一个以某种方式增强的 JDBCAppender。 (dankomannhaupt.de/projects/index.html) @2 这和我的基于切面的日志计划有关,谢谢指出。
    【解决方案2】:

    您是否考虑过使用 MappedSuperclass 进行 C(R)UD 操作日志记录?

    @MappedSuperclass
    public class BaseEntity {
    @Basic
    @Temporal(TemporalType.TIMESTAMP)
    public Date getLastUpdate() { ... }
    public String getLastUpdater() { ... }
    ...
    }
    
    @Entity class Order extends BaseEntity {
    @Id public Integer getId() { ... }
    ...
    }
    

    【讨论】:

      【解决方案3】:

      如果您使用日志记录解决方案并寻找自己的解决方案,请尝试搜索 JDBCAppender,它并不完美,但应该可以。

      如果您想要现成的集中记录产品 - 考虑尝试logFaces - 它可以直接写入您自己的数据库(披露:我是该产品的作者。)

      【讨论】:

      • 我浏览了 logFaces 的功能列表,我想它对我的应用程序来说有点过头了。不过,对于未来的项目,请牢记这一点。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2016-09-05
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多