如何在Web应用程序中记录用户操作?

时间:2009-04-29 21:54:06

标签: mysql hibernate logging report tracing

我的应用程序的环境:基于Web,Spring MVC +安全性,Hibernate,MySQL(InnoDB)

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:2)

  1. Log4j是模块化的,您可以编写自己的后端,如果您愿意,可以将日志写入数据库;事实上,它甚至还带有JDBC appender开箱即用,但请注意那里的大红色警告。
  2. 对于Hibernate,您可能可以在interceptors and events上构建一些跟踪所有修改并将其记录到特殊审计表的内容。

答案 1 :(得分:1)

您是否考虑过使用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() { ... }
...
}

答案 2 :(得分:0)

如果你去寻找日志解决方案并寻找自己做的事情,尝试搜索JDBCAppender,它并不完美,但应该有效。

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