使用外接程序中的log4net的.Net外接程序框架

时间:2012-02-01 15:00:30

标签: .net log4net add-in

我正在创建一个使用.Net Add-Ins Framework加载项的应用程序。我想使用log4net跟踪加载项内部的内容,但是我无法将记录的数据写入输出文件。我正在与主机成功使用log4net。

在我的加载项的assemblyinfo.cs中,我添加了这行代码:

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

这应该告诉log4net从.config文件中获取配置。

加载项的我的app.config如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" 
             initializeData="UpdateModuleLog.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
  <log4net>
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern 
            value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <root>
      <level  value="INFO"/>
      <appender-ref ref="TraceAppender"/>
    </root>
  </log4net>
</configuration>

加载项的app.config按预期移动到管道。

在我的插件中,我有以下代码来实例化log4net:

    private static readonly log4net.ILog log = log4net.LogManager.GetLogger
        (System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

最后,我在我的代码中调用log4net,如下所示:

        log.InfoFormat("Starting Update Module Version 1.0.0 for Internationalization Database.");

问题是从不创建UpdateModuleLog.log。我希望它可以在宿主应用程序的bin文件夹或管道中的加载项文件夹中创建,但它在任何一个地方都不存在。我正在使用TraceAppender,因为我想将写入Debug或Trace的任何内容记录到同一个文件中,但如果这需要写入单独的文件,那就这样吧。

此外,主机进程的日志文件不反映从加载项完成的任何日志记录。

1 个答案:

答案 0 :(得分:0)

找到答案。我的app.config缺少这部分代码:

  <configSections>
    <section name="log4net"
      type="log4net.Config.Log4NetConfigurationSectionHandler, 
            log4net"/>
  </configSections>