Log4net没有注销任何东西

本文关键字:任何东 注销 Log4net | 更新日期: 2023-09-27 18:01:33

我正在努力使用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>

需要注意的是,所有这些都是在一个项目中。运行此程序的程序在另一个项目中,但所有日志记录都在此程序集中完成。

Log4net没有注销任何东西

您可以启用log4net的内部调试输出,以跟踪为什么它不记录日志。

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

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

关于程序集属性的log4net文档是这样说的:

因此,如果使用配置属性,必须调用log4net以允许它读取属性。一个简单的电话LogManager。GetLogger将导致调用程序集上的属性被读取和处理。因此,必须进行日志记录在应用程序启动期间尽可能早地调用

然而,您的日志记录已经在外部程序集中。当使用汇编属性时,这有点问题,我建议在启动代码中使用XmlConfigurator.ConfigureAndWatch(…)