7

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

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

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

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

谢谢 !

编辑

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

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

3 回答 3

7

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

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

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

于 2013-05-21T14:11:49.200 回答
1

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

于 2012-07-10T14:52:53.413 回答
0

默认值“false”没有意义。预期的行为是快速和合理的。

并且 keepFileOpen 永远不应该保存文件,因为有一个FileStream名为FileShare.ReadWrite.

于 2019-02-20T02:40:17.613 回答