1

我试图让 log4net 在旧应用程序中工作,但是当它启动时我得到了这个异常(来自 DbgView):

log4net:ERROR XmlHierarchyConfigurator: 对象类型 [log4net.Appender.FileAppender] 不可分配给类型 [log4net.Appender.FileAppender+LockingModelBase]。没有可接受的类型转换。

log4net:错误 XmlHierarchyConfigurator:无法创建对象以设置参数:lockingModel

这是什么意思,更重要的是,我如何消除此错误并使其正常工作?如果这有什么不同,这在 Outlook 插件上。这是我的 app.config 文件(由于机密性,一些非必要部分已编辑):

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
  </configSections>
  <log4net>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="LogFileAppender" />
    </root>
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
        <param name="File" value="c:\errlog.txt" />
        <param name="AppendToFile" value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="10" />
        <maximumFileSize value="10MB" />
        <staticLogFileName value="true" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
        </layout>
    </appender>
  </log4net>    
  <system.diagnostics>
    <sources>
        <source name="System.Net" tracemode="includehex" maxdatasize="1024">
            <listeners>
                <add name="System.Net"/>
            </listeners>
        </source>
        <source name="System.Net.Sockets">
            <listeners>
                <add name="System.Net"/>
            </listeners>
        </source>
        <source name="System.Net.Cache">
            <listeners>
                <add name="System.Net"/>
            </listeners>
        </source>
    </sources>
    <switches>
        <add name="System.Net" value="Verbose"/>
        <add name="System.Net.Sockets" value="Verbose"/>
        <!--add name="System.Net.Cache" value="Verbose"/-->
    </switches>
    <sharedListeners>
        <add name="System.Net"
          type="System.Diagnostics.TextWriterTraceListener"
          initializeData="network.log" />
    </sharedListeners>
    <trace autoflush="true"/>
  </system.diagnostics>
  </appSettings>
</configuration>

我发现许多其他帖子说添加该行<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />应该可以解决这个问题,但它不能解决任何问题。我正在寻找的最终结果是一个日志文件,其中包含允许我调试这个应用程序的信息,我如何让这个东西工作?

另外,我已经阅读了关于 stackoverflow 的所有其他相关问题(其中有几十个),这是我见过的唯一一个甚至有相同异常消息的问题,并且没有提供对我有用的答案:无法使用值 [MinimalLock] 在对象 [log4net.Appender.RollingFileAppender] 上设置属性 [lockingModel]

4

2 回答 2

0

我手头没有编译器,但是当我将纯文本配置与我的工作配置集进行比较时,我相信你会错过

<file value="PATHTOFILE\error.log" />

你有

<param name="File" value="PATHTOFILE\error.log" />

这种差异似乎是可能的原因。

于 2012-07-10T19:30:48.373 回答
0

您将某些内容保存到 C: 的根目录,请检查您是否有权限这样做。我遇到了同样的问题,但我通过将文件保存到 D: 或 C: 中的某些文件夹解决了这个问题,在 root 配置下尝试一下:

<!--log to file-->
<system.diagnostics>
  <trace autoflush="true">
    <listeners>
      <add
        name="textWriterTraceListener"
        type="System.Diagnostics.TextWriterTraceListener"
        initializeData="C:\Users\Klaus\Documents\log4net.txt" />
    </listeners>
  </trace>
</system.diagnostics>
于 2015-11-18T03:00:37.717 回答