log4net GenericFailure。无法获取锁定文件

时间:2012-09-10 14:27:04

标签: c# log4net config

我第一次尝试配置log4net,我确定我已经正确配置了所有内容,但是,在获取空日志文件后,我打开了log4net调试器。我现在不断看到以下错误:

log4net:ERROR [RollingFileAppender] ErrorCode: GenericFailure. Unable to acquire lock on 
file "file path\file name" The process cannot access the file "file path\file name" because 
it is being used by another process.

我目前通过我的Web.config文件配置了log4net:

<log4net debug="true">
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Logs\\TransferPicturesApplicationLog.txt"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <maxSizeRollBackups value="5"/>
  <maximumFileSize value="10MB"/>
  <staticLogFileName value="true"/>
  <filter type="log4net.Filter.LevelRangeFilter">
    <param name="LevelMin" value="ERROR"/>
    <param name="LevelMax" value="DEBUG"/>
  </filter>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %level %logger - %message%newline"/>
  </layout>
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>
<root>
  <level value="INFO"/>
  <appender-ref ref="RollingFileAppender"/>
</root>
<logger>
  <level value="DEBUG"/>
  <appender-ref ref="RollingFileAppender"/>
</logger>
</log4net>

帮助!!!

3 个答案:

答案 0 :(得分:7)

我也遇到了这个错误,因为我指定了目录的名称而不是appender中的文件,错误信息很神秘:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <file value="C:\DirectoryNameHere\MyBad" />

答案 1 :(得分:2)

我的猜测是,在尝试访问此路径的不同程序集中有多个appender副本,因此它们都会尝试同时保留相应的日志文件。但是,可以肯定的是,我建议您使用Unlocker来确保您的文件没有被您不期望的其他内容保留。如果你有这个appender的多个实例试图打开同一个文件,你的问题是你没有正确使用appender;如果appender正在跨程序集使用,那么它的两次调用将无法很好地相互调用,从而导致一个已经在使用中的错误。如果是这种情况,重构可能是您唯一的选择。

答案 2 :(得分:0)

当我尝试在子目录中编写日志文件时遇到此问题(与@PeteN相同)。当使用正确的语法时,这不再发生,在de appender配置集:

<appender name="TestLogAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value=".\logDirectory\LogFileName.csv" />
  <....>

希望这会有所帮助