gpt4 book ai didi

Log4Net:什么时候获取和释放文件句柄?

转载 作者:行者123 更新时间:2023-12-01 09:31:59 25 4
gpt4 key购买 nike

我是 Log4Net 新手,并试图对其工作方式有一个基本/安全的了解。如果我将我的 Logger 配置为 FileAppender,并且我有多个如下所示的语句,一个接一个:

this.GetLogger().Info("...");
this.GetLogger().Error("....");

每次调用是否实际打开文件,写入字符串并关闭它?每次?或者还有其他事情发生吗?我想知道文件资源何时被使用。它是如何工作的?

最佳答案

文档:

This appender will first try to open the file for writing when ActivateOptions is called. This will typically be during configuration. If the file cannot be opened for writing the appender will attempt to open the file again each time a message is logged to the appender. If the file cannot be opened for writing when a message is logged then the message will be discarded by this appender.



换句话说:它会尽可能早地尝试打开文件,因此无论何时尝试记录都不会发生额外的开销。如果失败,它会在您每次尝试记录任何内容时尝试打开该文件。

您可以轻松检查日志记录在您的特定实例中的行为 - 每当打开文件时,布局的 Header 值将写入文件,每当关闭时,将写入布局的页脚值。

但是请注意,这是默认行为。 FileAppender使用 FileAppender.ExclusiveLock默认锁定模型。另一种选择是 FileAppender.MinimalLock锁定模型,它尝试在每次日志记录操作之前获取锁并在之后释放它。您可以按如下方式配置您的 appender 以使用它。
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="${TMP}\log-file.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>

获取对每个日志操作的锁定显然比默认的“获取一次,释放一次”模型更耗时。但是,这样做是有正当理由的——例如,如果在长时间运行的应用程序执行期间需要轮换日志文件。

关于Log4Net:什么时候获取和释放文件句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14346812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com