NLog File目标和keepFileOpen标志

时间:2012-07-09 21:27:34

标签: c# nlog

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

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

是否有人有想法(或只知道)为什么默认情况下此属性设置为“false”,从而导致日志记录的性能大幅下降?

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

谢谢!

修改

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

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

3 个答案:

答案 0 :(得分:6)

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

如果您打开文件的时间太长,请尝试使用AsyncWrapper,您将获得“一劳永逸”的行为。

因此我认为默认值没问题。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

keepFileOpen绝不应该保存文件,因为有一个名为FileStream的{​​{1}}标志。