当错误没有被放置在文件中时,停止使用文件的 log4net(或服务)
Stop log4net (or services) using a file when errors are not being placed in it
我有以下 log4net 配置
<?xml version="1.0" encoding="utf-8" ?>
<log4net xmlns="urn:log4net">
<appender name ="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="C:\temp\Generator.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maximumFileSize value="500KB" />
<maxSizeRollBackups value="10" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{DATE} %level %thread %logger - %message%newline" />
</layout>
</appender>
<appender name ="GenerationErrors" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="c:\temp\GenerationErrors.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{DATE} %level %thread %logger - %message%newline" />
</layout>
</appender>
<root>
<appender-ref ref="RollingFile" />
<level value="INFO" />
</root>
<logger name ="GPA.Module.Generate">
<level value="INFO" />
<appender-ref ref="GenerationErrors" />
</logger>
<logger name="PmuManagement">
<level value="INFO" />
<appender-ref ref="GenerationErrors" />
</logger>
</log4net>
第一个 appender 记录我所有进程的所有错误,第二个 appender 根据需要只记录特定的一组错误。
我需要能够即时删除第二个日志文件的内容,但是目前这是不可能的,因为程序需要不断访问它 运行(如果您尝试做任何更改您会收到“此文件正在被另一个程序使用”错误。
有没有办法让 log4net 只在需要写入错误时才需要访问文件?
或者是否有更通用的方法来停止 services/programmes 暂时需要访问文件并在不久之后再次允许访问?
谢谢
我在这里 Intermittent log4net RollingFileAppender locked file issue 找到了这个问题,答案正是我所需要的。我只是将 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
添加到我的第二个 appender。
我有以下 log4net 配置
<?xml version="1.0" encoding="utf-8" ?>
<log4net xmlns="urn:log4net">
<appender name ="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="C:\temp\Generator.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maximumFileSize value="500KB" />
<maxSizeRollBackups value="10" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{DATE} %level %thread %logger - %message%newline" />
</layout>
</appender>
<appender name ="GenerationErrors" type="log4net.Appender.FileAppender">
<file type="log4net.Util.PatternString" value="c:\temp\GenerationErrors.log" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{DATE} %level %thread %logger - %message%newline" />
</layout>
</appender>
<root>
<appender-ref ref="RollingFile" />
<level value="INFO" />
</root>
<logger name ="GPA.Module.Generate">
<level value="INFO" />
<appender-ref ref="GenerationErrors" />
</logger>
<logger name="PmuManagement">
<level value="INFO" />
<appender-ref ref="GenerationErrors" />
</logger>
</log4net>
第一个 appender 记录我所有进程的所有错误,第二个 appender 根据需要只记录特定的一组错误。
我需要能够即时删除第二个日志文件的内容,但是目前这是不可能的,因为程序需要不断访问它 运行(如果您尝试做任何更改您会收到“此文件正在被另一个程序使用”错误。
有没有办法让 log4net 只在需要写入错误时才需要访问文件?
或者是否有更通用的方法来停止 services/programmes 暂时需要访问文件并在不久之后再次允许访问?
谢谢
我在这里 Intermittent log4net RollingFileAppender locked file issue 找到了这个问题,答案正是我所需要的。我只是将 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
添加到我的第二个 appender。