log4net无法正常工作,没有创建文件,获取异常消息

时间:2012-07-10 18:52:42

标签: c# log4net

我正在尝试让log4net在遗留应用程序中运行,但是当它启动时我会收到此异常(来自DbgView):

  

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

     

log4net:错误XmlHierarchyConfigurator:无法创建要设置的对象   param: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上的所有其他相关问题(其中有几十个),这是我见过的唯一另一个甚至有相同的异常消息,并且没有提供适用的答案我:Unable to set property [lockingModel] on object [log4net.Appender.RollingFileAppender] using value [MinimalLock]

2 个答案:

答案 0 :(得分:0)

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

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

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

这种差异看起来可能是原因。

答案 1 :(得分: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>