Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 如何使用NLog/Log4Net自动化数据库更改跟踪?_Logging_Log4net_Nlog_Audit Trail - Fatal编程技术网

Logging 如何使用NLog/Log4Net自动化数据库更改跟踪?

Logging 如何使用NLog/Log4Net自动化数据库更改跟踪?,logging,log4net,nlog,audit-trail,Logging,Log4net,Nlog,Audit Trail,我知道很多表审计方法。有些是基于触发器的,需要审核每个表上的触发器。有些限制基于列数据类型。如何使用NLog或Log4Net之类的日志框架。我想让我的日志(在一个表中)回答问题“此时谁将此表的此列从val0更新为val1?” 我还没有决定使用什么样的地图。倾向于NHibernate或EF 提前谢谢 如果使用这样的模式(我在Java和Hibernate中成功地使用了它),则可以为数据库中的每个更改添加一个条目。如果使用,则可以将拦截器添加到DAO访问数据库的方法中 无论如何,您可能希望为DAOs包

我知道很多表审计方法。有些是基于触发器的,需要审核每个表上的触发器。有些限制基于列数据类型。如何使用NLog或Log4Net之类的日志框架。我想让我的日志(在一个表中)回答问题“此时谁将此表的此列从val0更新为val1?”

我还没有决定使用什么样的地图。倾向于NHibernate或EF

提前谢谢

如果使用这样的模式(我在Java和Hibernate中成功地使用了它),则可以为数据库中的每个更改添加一个条目。如果使用,则可以将拦截器添加到DAO访问数据库的方法中

无论如何,您可能希望为DAOs包添加一个特殊的appender,因为它会非常冗长。

如果您使用这样的模式(我在Java和Hibernate中成功地使用了它),您可以为数据库中的每个更改添加一个条目。如果使用,则可以将拦截器添加到DAO访问数据库的方法中


无论如何,您可能希望为DAOs包添加一个特殊的附加程序,因为它会非常冗长。

Victors的答案是一流的,但我想补充一点,这可能很难,这取决于列->对象映射的工作方式

如果您将表列映射到具有不同名称的对象属性和字段,那么我认为您将尝试解析sql信息以确定更新了哪个列。例如,如果您更改了“Product.Price”的值,而该值实际上映射到一个名为“final_Price”的列,那么您的日志记录将与数据库中发生的内容不完全匹配


这也可能是错误的,但如果您通过ORM包处理断开连接的实体,我不确定更改跟踪信息是否可用。我模模糊糊地记得我读到的一个问题,您列出的一个ORM在哪里更新了每一列,所以当用户真正更新了一列时,似乎用户更改了表中的所有列。

胜利者的答案是一流的,但我想补充一点,这可能很难取决于列->对象映射的工作方式

如果您将表列映射到具有不同名称的对象属性和字段,那么我认为您将尝试解析sql信息以确定更新了哪个列。例如,如果您更改了“Product.Price”的值,而该值实际上映射到一个名为“final_Price”的列,那么您的日志记录将与数据库中发生的内容不完全匹配

这也可能是错误的,但如果您通过ORM包处理断开连接的实体,我不确定更改跟踪信息是否可用。我模模糊糊地记得我读到的一个问题,您列出的一个ORM正在更新每一列,所以当用户真正更新一列时,似乎用户更改了表中的所有列