当错误没有被放置在文件中时,停止使用文件的 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。