我目前正在为我们的一个网络项目开发一个日志记录解决方案。
类似于此处描述的
MySQL Trigger based Audit logging with comparisons
我们希望记录现有记录的更改列,插入新记录和删除记录。对于更新,我必须以某种方式比较旧值 DB记录与那些,用户保存。对于插入,日志记录很简单,对于删除,我必须首先将旧值存储,然后在记录表中删除之前。
我现在面临的问题是。你认为什么是更好的解决方案。
在数据库级别通过触发器记录或在应用程序级别使用合适的设计模式。
已经存在一些关于它的线程,但没有考虑什么是更好的,一个(触发器)或另一个(在应用程序级别上)。
在另一个线程中建议使用AOP
Which design pattern would you consider when Logging is needed?
我正在使用DB设计来记录#1,如此处所示
我有一个单独的表来记录每个观察到的表。结构如下
ID : Integer
COLUMN: String, the column name of the column that changed
OLD_VAL: String
NEW_VAL: String
SOURCE: String, the source which changed the data, currently user and an agent are possible as sources
create_at: DATETIME, then the change occurred
那么你们的想法是什么?考虑到性能与干净的代码和信息隐藏,实现这样的日志系统的更好的解决方案是什么。
任何想法都赞赏。
答案 0 :(得分:2)
如果您不在触发器中执行此操作,则您不会记录所需信息的可能性非常接近100%。并非所有数据都通过应用程序更改。即使开发人员认为它会。有时需要修复或更新大量数据(认为价格上涨10%),这些查询将直接在数据库上进行。仅通过应用程序进行日志记录意味着您将错过这些更改。有时这些变化是一个恶劣的用户或员工,并且是最重要的审计之一。
答案 1 :(得分:1)