gpt4 book ai didi

locking - log4net RollingFileAppender 间歇性锁定文件问题

转载 作者:行者123 更新时间:2023-12-03 04:41:59 26 4
gpt4 key购买 nike

我们在开发和生产计算机上发现一个间歇性问题,即我们的日志文件未记录到。

当使用 Visual Studio 进行开发和调试时,我们在 VS 输出窗口中收到以下 log4net 错误消息:

log4net:ERROR [RollingFileAppender] Unable to acquire lock on file C:\folder\file.log.

该进程无法访问文件“C:\folder\file.log”,因为该文件正在被另一个进程使用。

log4net:ERROR XmlConfigurator: Failed to find configuration section 'log4net' in the application's .config file.
Check your .config file for the <log4net> and <configSections> elements.

配置部分应如下所示:

<section
name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

我们当前解决该问题的方法是重命名最后一个日志文件。我们当然希望这会失败(由于前面提到的文件锁定),但通常不会。由于 aspnet_wp.exe 进程的锁定,重命名有一两次失败。

我们的 log4net 配置部分如下所示:

<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\folder\file.log"/>
<appendToFile value="true" />
<datePattern value="yyyyMMdd" />
<rollingStyle value="Date" />
<maximumFileSize value="10MB" />
<maxSizeRollBackups value="100" />
<layout type="log4net.Layout.PatternLayout">
<header value="[Header]&#xA;"/>
<footer value="[Footer]&#xA;"/>
<conversionPattern value="%date %-5level %logger ${COMPUTERNAME} %property{UserHostAddress} [%property{SessionID}] - %message%newline"/>
</layout>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>

如上所述,我们在计算机上间歇性地看到这种情况,但一旦问题发生,它就会持续存在。

最佳答案

尝试添加

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

给您的<appender />元素。这会对性能产生一些影响,因为这意味着 log4net 将锁定文件、写入文件并为每个写入操作解锁文件(与默认行为相反,默认行为会长时间获取并保持锁定)。

默认行为的一个含义是,如果您在一个网站下使用它,而该网站正在同一台计算机上运行的多个工作进程下执行,则每个工作进程都会尝试无限期地获取并保留该锁,并且两个他们中的一些人将会失败。将锁定模型更改为最小锁定可以解决此问题。

(调试时,不正常的终止和启动大量新的工作进程正是很可能发生的事情。)

祝你好运!

关于locking - log4net RollingFileAppender 间歇性锁定文件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999382/

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