log4net没有注销任何东西

时间:2014-05-02 11:00:51

标签: c# log4net

我正在努力使用log4net注销任何内容。我尝试过使用各种来源的代码,但仍然没有快乐。有人可以帮我找出原因吗?

Assembly.cs

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

MyClass.cs

private static readonly ILog log = LogManager.GetLogger(typeof(MyClass));

log.Info("Complete: "+result); // used when my "task" completes, is always called

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <file value="log-file.txt" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="[Your Header text here]" />
      <footer value="[Your Footer text here]" />
      <conversionPattern value="%date [%thread] %-5level %logger [%ndc] &lt;%property{auth}&gt; - %message%newline" />
    </layout>
  </appender>

  <!-- Set the default logging level and add the active appenders -->
  <root>
    <level value="DEBUG" />
    <appender-ref ref="LogFileAppender" />
  </root>

</log4net>

有一点需要注意的是,这一切都只涉及一个项目。运行此程序的程序位于不同的项目中,但所有日志记录都在此程序集中完成。

3 个答案:

答案 0 :(得分:1)

您可以启用log4net的内部调试输出,以追踪它未记录的原因。

有关详细信息,请参阅this answer

答案 1 :(得分:1)

您是否在Web.config或App.config中为配置添加了log4net部分?

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

答案 2 :(得分:0)

log4net documentation for assembly attributes说:

  

因此,如果使用配置属性,则必须调用log4net   允许它读取属性。一个简单的电话   LogManager.GetLogger将导致调用程序集上的属性   被阅读和处理。 因此必须进行日志记录   在应用程序启动期间尽早调用,以及   当然,在加载和调用任何外部程序集之前。

您的日志记录已经在外部程序集中。使用程序集属性时这是一个问题,我建议您在启动代码中使用XmlConfigurator.ConfigureAndWatch(…)