【发布时间】:2014-01-06 11:49:24
【问题描述】:
我希望这不是题外话,但这是一个 C# .Net 问题:
我正在使用 log4net 1.2.10。在 apache log4net 论坛上已经声明,从 1.2.9 开始,可以使用不同的文件锁定模式。我已按照给出的示例配置 log4net 以使用非默认方法(最小锁定或进程间锁定),但立即产生以下错误消息:
log4net:ERROR XmlHierarchyConfigurator: 找不到属性 [lockingModel] 在 [log4net.Repository.Hierarchy.DefaultLoggerFactory+LoggerImpl] 上设置对象 log4net:ERROR [RollingFileAppender] 无法获取文件 C:\Program Files (x86)\Autoscribe\Matrix Gemini LIMS\Exe\log\Trace.log 的锁定。该进程无法访问文件“C:\Program Files (x86)\Autoscribe\Matrix Gemini LIMS\Exe\log\Trace.log”,因为它正被另一个进程使用。
我的 log4net.config 文件是:
<logger name="Matrix.Trace">
<!--this is for routine debug logging to a file-->
<level value="OFF" />
<lockingModel type="log4net.Appender.RollingFileAppender+InterProcessLock" />
<appender-ref ref="RollingFileAppenderTRACE" />
</logger>
<appender name="RollingFileAppenderTRACE" type="log4net.Appender.RollingFileAppender">
<file value=".\log\Trace.log" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m%newline" />
</layout>
<appendToFile value="true" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />
</appender>
等等……
我的 C# 应用程序这样做:
private static readonly ILog bllDebugLog = LogManager.GetLogger("Matrix.Trace"); //for debugging
和
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo("log4net.config"));
如果我使用默认锁定方法,日志记录确实有效(但我有多个进程的文件锁定问题,这是我正在尝试解决的问题)。
我从 log4net 文档中看不到为什么会失败。该错误似乎表明 log4net 1.2.10 不支持非默认锁定,但 apache 文档很清楚它应该支持。我究竟做错了什么?
TIA
【问题讨论】:
-
我现在已经升级到 log4net 1.2.13(.net 3.5 构建),我收到一条不同的错误消息:“log4net:ERROR XmlHierarchyConfigurator: 找不到属性 [lockingModel] 在 [ log4net.Repository.Hierarchy.DefaultLoggerFactory+LoggerImpl]"。如果我在 VS 对象浏览器中查看 log4net dll,FileAppender 类显然具有该属性,那么这里是什么?