NLog中的FileTarget对象有一个名为“keepFileOpen”的属性(bool)。 默认情况下,此属性设置为false,这意味着每个日志事件都将打开文件,写入文件并关闭文件。
性能打击很大,所以我将“keepFileOpen”指定为true而不是false,这意味着该文件只会打开一次。
是否有人有想法(或只知道)为什么默认情况下此属性设置为“false”,从而导致日志记录的性能大幅下降?
是否存在将此属性设置为true的情况会导致问题(因此将其默认为“false”是有意义的。)
谢谢!
修改
基本布局的性能测量,将100K事件写入记录器:
答案 0 :(得分:6)
我会说关闭文件是预期的行为。如果您尝试从另一个进程访问该文件或在NLog进程处于活动状态时将其删除到文件系统中,则会导致那些令人讨厌的系统错误,说某些进程保存文件等。
如果您打开文件的时间太长,请尝试使用AsyncWrapper,您将获得“一劳永逸”的行为。
因此我认为默认值没问题。
答案 1 :(得分:1)
我会尝试向他们发送电子邮件并询问他们。我无法弄清楚默认情况下此选项为false的任何原因。
答案 2 :(得分:0)
默认值'false'没有意义。预期的行为是快速而合理的。
keepFileOpen绝不应该保存文件,因为有一个名为FileStream
的{{1}}标志。