单独的数据库来存储日志和异常

Sab*_*ber 4 sql-server logging rdbms elmah nlog

在企业项目中,我需要记录大量数据(原始值,修改后的值,已更改数据的用户等)我正在使用NLog记录此类数据,而使用ELMAH记录异常.我不确定是否使用单独的数据库来存储日志记录信息或使用主数据库.使用单独数据库的优点是:

  • 日志和异常不是业务的一部分,因此它们不需要位于主数据库中.
  • 主数据库上的负载会减少,从而产生更好的性能.

缺点是:

  • 如果日志数据库停止,我们将错过在此项目中非常重要的日志.(虽然如果日志记录不成功,我们可以阻止保存)
  • 处理交易将很困难.(如果保存日志,但数据不是,那该怎么办)

当然还有更多的优点和缺点,但总而言之,我需要知道:使用大型事务RDBMS的企业软件中的最佳实践是什么?或者根据某些因素,它可能因项目而异?

Rem*_*anu 6

您希望将错误日志记录与数据访问分开并分离.如果数据访问回滚,您希望保留日志访问权限记录其回滚的事实.如果数据库已关闭,您需要记录数据库关闭.如果您的日志记录与数据访问在事务上是一致的,那么您的系统可能会在一分钟内遇到10次回滚,但您的错误日志将不会显示!

日志记录应该是其自己的存储(数据库)的另一个原因是,关系通常不是1:1,错误日志记录通常聚合从多个系统报告的错误,可能由多个数据库支持.

用于提交错误报告的基础结构应该处理错误日志存储库的不可用性(即,日志数据库已关闭或网络已分区),请使用可用的众多排队解决方案之一(MSMQ,RabbitMQ,ZeroMQ等).