【问题标题】:Nlog database target - to use keepConnection or not?Nlog 数据库目标 - 是否使用 keepConnection?
【发布时间】:2023-03-12 18:45:01
【问题描述】:

我在 asp.net 2.0 应用程序中使用 NLog;它获得大量流量并记录大量数据(平均每天约 5000 条日志记录),用于错误记录和统计目的。它使用两个不同的数据库目标,每个目标调用一个存储过程,并且都使用相同的连接字符串 (SQL Server)。

从一些文档中复制目标定义后,两个目标都将 keepConnection 设置为“true”,我知道这是默认值。我的问题是,这是可取的吗?我确实经常看到 NLog 在数据库上打开了许多打开的连接(查看活动监视器中的打开进程),而且我有时会遇到连接失败的情况日志;我很想尝试关闭 keepConnection,但我也担心大量的打开和关闭操作。我没有查看源代码,而且我不确定我是否能够回答我自己的问题,所以我不确定连接相对于其父应用程序所在的池是如何工作的。

有什么想法、警告或建议吗?我知道我的问题有点含糊 - 只是我找不到比这个属性的基本文档更多的东西,并且想要一些关于利弊的反馈 - 即,为什么将它放入 NLog 中第一名? 谢谢。

【问题讨论】:

  • PS:我正在使用 NLog 1.0.0.505,虽然在我的开发环境中刚刚切换到 2.0.0.0。
  • 您使用的是 MS SQL Server 吗?

标签: asp.net sql nlog


【解决方案1】:

传统上,由于您所说的确切原因,keepConnection 已启用,快速打开/关闭大量连接将是可怕的。如果禁用,NLog 将打开一个连接,编写一个日志语句,然后关闭每个连接。

如果您想关闭连接,您始终可以使用包装器通过批量写入日志来提高日志记录性能

查看异步缓冲区:https://github.com/nlog/nlog/wiki/AsyncWrapper-target

默认批量大小为 100,这对您来说可能没问题。在这种情况下,禁用 keepConnection 就可以了。这样,NLog 会将 100 条日志消息排队,然后打开一个连接,将它们全部写入,然后关闭连接。

此外,每天 5000 条日志对于日志记录来说确实很低,即 4 条日志/分钟,当然不是很重的负载。听起来好像还有什么问题。

首先想到的是您使用的是通常需要事务的 SQL Server。默认情况下它在 NLog 中被禁用,因此请务必在日志配置中显式启用事务..

useTransactions=true

https://github.com/nlog/nlog/wiki/Database-target

【讨论】:

  • 感谢异步包装器提示。 +
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多