对于记录详细的日志,xxx修改了某个字段,原来值是多少,新值是多少这种日志大家有什么高见
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);
}
一处地方,几句代码搞定。
如果不是ef,其他orm都差不多有中间实现层,找到重写记下数据即可。
不需要记原始,原始就是上一次日志记录。
@花飘水流兮: 好的,我尝试一下先,谢谢
触发器吧.比较简单.
好的,我尝试一下先,谢谢
简单的话在你持久化层这块做一次aop,然后进行记录,复杂点的话可能需要一个事件模型,将所有修改变成event推到一个地方进行记录,因为每次修改都会有响应的事件产生,所以不管在任何一个点上你都可以还原当时的场景,具体的可以找下event sourcing
好的,我尝试一下先,谢谢