Sql server 数据库日志记录的是什么?

Sql server 数据库日志记录的是什么?,sql-server,database,logging,log4net,Sql Server,Database,Logging,Log4net,我对SQL Server很陌生,想知道SQL Server日志和自定义日志(在我的例子中,使用log4net)之间的区别是什么?我想在使用log4net记录什么方面有更多的选择,但是数据库会自动记录哪些内容呢?例如,如果用户注册到我的站点,我需要手动记录该事务,还是自动记录在数据库的日志中?我目前正在启动一个项目,想弄清楚我到底应该做些什么 多谢它跟踪事务,以便在崩溃时回滚或重播。比简单的日志记录要复杂得多。SQL日志处理用于回滚或复制数据的事务日志记录。通常只有那些知道他们正在做什么的人才能处

我对SQL Server很陌生,想知道SQL Server日志和自定义日志(在我的例子中,使用log4net)之间的区别是什么?我想在使用
log4net
记录什么方面有更多的选择,但是数据库会自动记录哪些内容呢?例如,如果用户注册到我的站点,我需要手动记录该事务,还是自动记录在数据库的日志中?我目前正在启动一个项目,想弄清楚我到底应该做些什么


多谢

它跟踪事务,以便在崩溃时回滚或重播。比简单的日志记录要复杂得多。

SQL日志处理用于回滚或复制数据的事务日志记录。通常只有那些知道他们正在做什么的人才能处理这些问题—恢复备份或将日志发送到备份中


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

这两者几乎完全不相关

数据库日志用于回滚事务、从崩溃中恢复等,所有这些都是确保数据库一致性的好方法。它有更新/插入/删除功能——实际上与意图或应用程序试图执行的操作无关,除非它直接影响数据库中的数据


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

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


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

这是RMDBS可以确保的机制,请参见。

苹果和橙子

Log4net和其他自定义“日志记录”只是捕获应用程序正在报告的事件的一种方式此上下文中的“日志”引用此基础结构用于持久化有关这些事件的信息的任何存储

另一方面,数据库日志则完全不同。为了保持一致性和原子性,数据库使用所谓的协议。在WAL中,所有更改首先写入日志或日志,然后再应用于数据。这允许恢复重播日志(日志),并通过回滚任何未限制的工作将数据恢复到一致状态


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

什么会使日志缩小?数据提交后是否被删除?@Sergio——这取决于很多因素(数据库、负载、恢复模型等)。通常,处于“简单”模式的SQL Server DB会尽可能地环绕其日志文件。它通常会在必须时增长,然后仅在启用自动收缩(错误)或使用命令或SQL作业手动收缩时才会收缩。