【问题标题】:NLog File target and keepFileOpen flagNLog 文件目标和 keepFileOpen 标志
【发布时间】:2012-07-09 08:18:57
【问题描述】:

NLog 中的 FileTarget 对象有一个名为“keepFileOpen”的属性(布尔值)。 默认情况下,该属性设置为 false,表示每个日志事件都会打开文件、写入文件并关闭文件。

对性能的影响很大,所以我将“keepFileOpen”指定为 true,而不是 false,这意味着文件只会打开一次。

是否有人知道(或只是知道)为什么此属性默认设置为“false”,从而导致日志记录性能受到巨大影响?

在任何情况下将此属性设置为 true 会导致问题(因此将其默认为“false”是有意义的)。

谢谢!

编辑

基本布局的性能测量,将 100K 事件写入记录器:

  • keepFileOpen = false(默认):~ 101 秒
  • keepFileOpen = true : ~ 1 秒

【问题讨论】:

    标签: c# nlog


    【解决方案1】:

    我会说关闭文件是预期的行为。如果您在 NLog 进程处于活动状态时尝试从另一个进程访问该文件或在文件系统中将其删除,则会导致那些烦人的系统错误,即某些进程持有该文件等。

    如果打开文件的时间对您来说太长,请尝试使用 AsyncWrapper,您将获得即发即弃的行为。

    因此我认为默认值是可以的。

    【讨论】:

      【解决方案2】:

      我会尝试向他们发送电子邮件并询问他们。我无法弄清楚为什么这个选项默认为 false 的任何原因。

      【讨论】:

        【解决方案3】:

        默认值 'false' 没有意义。预期的行为是快速且合理的。

        keepFileOpen 永远不应该保存文件,因为有一个名为 FileShare.ReadWriteFileStream 标志。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-27
          相关资源
          最近更新 更多