java - 是否有任何启发式/模式来记录用户操作

标签 java gwt logging

我有一个 GWT/Java/Hibernate/MySQL 应用程序(但我认为任何 Web 模式都可能有效),它对多个对象执行 CRUD。每个对象都存储在数据库的表中。我想实现一个 Action 记录器。例如,对于对象 A,我想知道谁创建了它并修改了它,对于用户 B,他执行了哪些操作。

我的想法是有一个历史表来存储:UserId、ObjectId、ActionName。 UserId 和 ObjectId 是外键。我走在正确的道路上吗?

最佳答案

我也认为这是正确的方向。
但是,请记住,在流量较大的应用程序中,此日志可能会产生开销。 在这种情况下我会建议以下 - A. 不要使用 hibernate 进行此“操作日志记录” - Hibernate 对于“主要读取数据库”具有更好的性能
B. 考虑在操作日志表的“主要是写入”场景中更好的数据库。
您可以尝试为此寻找 NoSQL 解决方案。
C. 如果您使用此类 NoSQL 数据库,但仍希望将日志操作保留在关系数据库中,例如,有一个每天运行一次的离线进程,它将查询您的“操作日志数据库”并将其插入到关系数据库。
D. 如果您的系统可能会丢失一些操作日志记录,请考虑使用生产者/消费者模式(例如 - 在生产者和消费者线程之间使用队列) - 需要记录操作的线程不会同步记录它们,但会记录他们异步。
E.另外,不要忘记这样的日志表有可能在时间上被过度淹没,导致对其的查询需要很长时间。
对于这些问题,请考虑以下因素:
E.1。每天删除真正旧的日志 - 比方说 - 超过一个月的日志,或者将它们移动到某个“备份”表。
E.2 索引一些您主要用于操作日志查询的字段(例如 - 可能是一个 action_type)字段。

关于java - 是否有任何启发式/模式来记录用户操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12770142/

相关文章:

java - 是否可以将两种不同的样式应用于单个组件

c# - 如何在单例类中使用 transient 记录器,简单注入(inject)器

java - 将JUL相关的log4j 1.2配置转换为log4j 2配置

java - SAAJ 包括客户端证书

Java 到 JavaScript 编译器

java - 安卓 : application crashes with BadTokenException Error (trying to show AlertDialog)

java - GAE 和通用 servlet Controller

mongodb - 我们如何限制 mongodb 生成的日志文件的大小? (即/var/log/mongodb/*.log)

java - 如何在 JPanel 中绘图? ( Swing/图形Java)

java - 测试 Spring Boot REST 资源问题