日志记录的数据比如:用户,时间,被访问的类、方法,以上几项都是好获得的,还有一项就是被访问/修改/删除的数据,如何得到如被修改前的数据,修改后的数据?
对于更新,一般是先获取,然后更改值,最后保存。那么获取之后,序列化对象并存储,保存成功后,再序列化一次对象。
这个问题好像只有在数据库层面解决,因为不可能把数据全部拉到程序里处理,不然到不要数据库软件了。
我觉得用事务是不是可以解决,把用户,时间,被访问的类、方法这几个数据一起发到数据库,然后数据库里用触发器记录各种操作。
@happydaily: 如果要这样用触发器,那我表示对程序的性能堪忧。记录日志,本身应该是基础设施层的事情。不过,你的日志的定制化的(数据变化前,数据变化后),所以我觉得应该放在业务层处理。既然有这样记录日志的要求,那么我想应该是有其必要性的。
@幻天芒: 业务层表示没有数据,这玩意不好监控啊。
@happydaily: 业务层没数据,就去拿数据呀。再说了,你要更新,总是有数据的。
@幻天芒: 数据肯定是有的,比如update tableA set name='张三' where id>50,日志记录时要的是这段代码真实影响的行,还得取一次数据,效率也不高啊?
@happydaily: 比触发器好,呵呵~
类似的功能我只做过触发器,而且也无法满足你的需求。关注一下。
我一般都是在更新前,对修改的数据内容做个日志记录。
此外,你可以通过数据库系统的日志来获取历史数据,然后进行修正,这个,一般工程很大。
类似的功能我是这样和客户说的,原来的系统报价只要10万,你想要这个简单的功能,只需要再加50万,
我咬咬牙,也就帮你做了。
这么麻烦啦
@happydaily: 只是为了加深你的印象而已,别被吓坏了。不过妥妥的方案涉及到很多东东。
另外对系统的性能将有极大的伤害。
还有就是需要记录到这个级别的50万其实真是小事了。
大部份的用户其实不是真的需要,只是他认为开发这个功能没有成本或者成本极低而已。
这个极其考验直接面对客户的人的经验,有时候客户真的只是天真,不是认真。
只能自己记录数据状态了。
1。建一个表中来记录数据操作的增,删语句,时间,用户, 建一个表用来记录删除的数据,时间,用户(对该库数据定期删除)
也可以加写触发器