我第一次尝试配置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>
帮助!!!
答案 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" />
<....>
希望这会有所帮助