数据库日志跟踪的是什么?

时间:2010-02-16 22:17:05

标签: sql-server database logging log4net

我对SQL Server很陌生,想知道SQL Server日志和自定义日志之间有什么区别(在我的情况下,使用log4net)?我想有更多选择使用log4net进行日志记录,但数据库会自动记录哪些内容?例如,如果用户注册到我的站点,我是否必须手动记录该事务,还是会自动记录在数据库的日志中?我现在正在开始一个项目,想知道我应该记录什么。

由于

6 个答案:

答案 0 :(得分:5)

苹果和橘子。

Log4net和其他自定义“日志记录”只是捕获应用程序报告的事件的一种方法。此上下文中的“Log”指的是此基础架构使用的任何商店来保存有关这些事件的信息。

另一方面,数据库日志是完全不同的。为了保持一致性和原子性,数据库使用所谓的Write-Ahead-Log协议。在WAL中,所有更改在应用于数据之前首先持久写入日志或日志。这允许恢复重放日志(日志)并通过回滚任何未完成的工作将数据恢复到一致状态。

数据库日志与您的应用程序代码完全无关。引擎会自动记录任何数据库更新,因为这是数据库中任何数据更新的方式。你无法修改它,也无法访问日志中的内容(严格来说,你可以查看日志,但是你找不到任何有用的信息)。

答案 1 :(得分:2)

SQL日志处理用于回滚或引用数据的tansaction日志记录。它们通常只由知道他们正在做什么来恢复备份或运送日志以用于备份的人处理。

log4net和其他日志记录framweworks处理您希望为自己的信息输出的异常,警告或调试级别信息的代码记录。它们可以发送到数据库,命令窗口,平面文件或Web服务中的表。常见的日志记录方案是在应用程序级别捕获未处理的异常以帮助跟踪错误,或者在写出堆栈跟踪的任何try catch语句中捕获。

答案 2 :(得分:1)

它会跟踪事务,以便在发生崩溃时将其回滚或重放。比简单的日志记录更加复杂。

答案 3 :(得分:1)

这两者几乎完全不相关。

数据库日志用于回滚事务,从崩溃中恢复等。确保数据库一致性的所有好事。它包含更新/插入/删除 - 除非它直接影响数据库中的数据,否则不是关于意图或尝试的应用程序的内容。

另一方面,使用Log4Net的应用程序日志在构建和调试应用程序时非常有用。它由驱动,并且应包含跟踪您的应用正在执行的操作的信息。当您不再需要它时,可以安全地关闭或减少(通过切换日志级别)。

答案 4 :(得分:1)

SQL Server日志文件实际上用于维护它自身的稳定性,但它对普通开发人员来说并不是非常有用。这不是你想的(我想的是),一个已经运行的SQL语句列表。这是一种适当的格式,旨在帮助SQL从崩溃或回滚事务中恢复。

如果您需要跟踪系统中发生的情况,那么SQL事务日志将没有用处,并且很难将这些信息取回。相反,我建议在表上添加触发器,将信息写入另一个表,或者在数据层中添加一些代码,以保存正在发生的事情的日志。它可以像使用您自己的实现包装SQL命令对象一样简单,除了执行正常的代码之外,它还将SQL语句保存到log4net。

答案 5 :(得分:0)

这是RMDBS可以确保atomicityconsistency的机制,请参阅ACID