【问题标题】:Why does log4net use transactions by default for the AdoNetAppender为什么 log4net 默认为 AdoNetAppender 使用事务
【发布时间】:2023-03-23 12:20:02
【问题描述】:

我想不出在使用 log4net 进行日志记录时为什么要使用事务。假设您有 200 条日志消息,并且在插入第 150 条消息并回滚时事务失败。您现在在数据库中没有日志消息,而如果您不使用事务,您将有 150 条消息。在日志记录方面,有一些消息不是比没有更好吗?

在使用 log4net 将日志消息写入数据库时​​,谁能想到使用事务的充分理由(假设您没有覆盖 AdoNetAppender 行为并且消息一次写入一行)?

【问题讨论】:

    标签: sql ado.net log4net


    【解决方案1】:

    在日志记录方面,有一些消息不是比没有更好吗?

    是的,但是 log4net 不是为reliability 设计的,我认为创建和提交 200 个 sql 事务而不是一个,肯定会对性能产生一些影响。我猜这种性能影响必须足够大,才能以这种方式设置默认值。

    【讨论】:

    • 是的 - 这正是我想知道为什么 AdoNetAppender 默认使用事务的原因。
    • 我不确定你是同意还是不同意我的观点。默认值更快,并且在您的 sql 服务器上施加的负载更轻 - 这还不足以成为默认值。
    • 我是说它根本不应该使用事务。
    • 但交易必须在某处创建。如果 log4net 没有创建显式 sql 事务,那么 sql server 将为每个 update/insert 语句创建一个隐式 sql 事务,即 200 个。
    • 我多么天真地认为我没有使用事务。这促使我进行了一些性能测试,并且在打开事务的情况下它的速度几乎是原来的两倍。 “自动提交模式是 SQL Server Compact 的默认事务管理模式。每个 SQL 语句在完成时都会提交或回滚。只要此默认模式未被显式事务覆盖,SQL Server Compact 连接就会在自动提交模式下运行。自动提交模式也是 ADO.NET 和 OLE DB 的默认模式。" link
    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2015-02-11
    • 2010-10-09
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多