首页 新闻 会员 周边 捐助

对于记录详细的日志,xxx修改了某个字段,原来值是多少,新值是多少这种日志大家有什么高见

0
悬赏园豆:20 [已解决问题] 解决于 2018-01-11 17:26

对于记录详细的日志,xxx修改了某个字段,原来值是多少,新值是多少这种日志大家有什么高见

GDOUJKZZ的主页 GDOUJKZZ | 菜鸟二级 | 园豆:315
提问于:2017-12-25 08:40
< >
分享
最佳答案
0

class EfIntercepterLogging : DbCommandInterceptor
{
private readonly Stopwatch _stopwatch = new Stopwatch();
public override void ScalarExecuting(System.Data.Common.DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
{
base.ScalarExecuting(command, interceptionContext);
_stopwatch.Restart();
}
public override void ScalarExecuted(System.Data.Common.DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
{
_stopwatch.Stop();
if (interceptionContext.Exception != null)
{
Trace.TraceError("Exception:{1} \r\n --> Error executing command: {0}", command.CommandText, interceptionContext.Exception.ToString());
}
else
{
Trace.TraceInformation("\r\n执行时间:{0} 毫秒\r\n-->ScalarExecuted.Command:{1}\r\n", _stopwatch.ElapsedMilliseconds, command.CommandText);
}
base.ScalarExecuted(command, interceptionContext);
}

一处地方,几句代码搞定。

收获园豆:20
花飘水流兮 | 专家六级 |园豆:13615 | 2017-12-25 09:09

 如果不是ef,其他orm都差不多有中间实现层,找到重写记下数据即可。

不需要记原始,原始就是上一次日志记录。

花飘水流兮 | 园豆:13615 (专家六级) | 2017-12-25 09:12

@花飘水流兮: 好的,我尝试一下先,谢谢

GDOUJKZZ | 园豆:315 (菜鸟二级) | 2017-12-25 17:28
其他回答(2)
0

触发器吧.比较简单.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-12-25 09:50

好的,我尝试一下先,谢谢

支持(0) 反对(0) GDOUJKZZ | 园豆:315 (菜鸟二级) | 2017-12-25 17:29
0

简单的话在你持久化层这块做一次aop,然后进行记录,复杂点的话可能需要一个事件模型,将所有修改变成event推到一个地方进行记录,因为每次修改都会有响应的事件产生,所以不管在任何一个点上你都可以还原当时的场景,具体的可以找下event sourcing

Daniel Cai | 园豆:10424 (专家六级) | 2017-12-25 11:27

好的,我尝试一下先,谢谢

支持(0) 反对(0) GDOUJKZZ | 园豆:315 (菜鸟二级) | 2017-12-25 17:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册