log4net在以Release模式构建的.Net 4.0 Windows应用程序中运行时无法记录日志

6

我有一个使用log4net的.Net 4.0 windows服务应用程序。

以下是我的log4net配置。

<log4net>
  <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" />
    </layout>
  </appender>

  <appender name="ColorConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
    <mapping>
      <level value="ERROR" />
      <foreColor value="Red, HighIntensity" />
    </mapping>
    <mapping>
      <level value="FATAL" />
      <foreColor value="Red, HighIntensity" />
    </mapping>
    <mapping>
      <level value="WARN" />
      <foreColor value="Blue, HighIntensity" />
    </mapping>
    <mapping>
      <level value="INFO" />
      <forecolor value="White, HighIntensity" />
    </mapping>
    <mapping>
      <level value="DEBUG" />
      <forecolor value="Green, HighIntensity" />
    </mapping>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" />
    </layout>
  </appender>

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <appendToFile value="true" />
    <datePattern value="yyyyMMdd" />
    <file value="Logs/Server.log" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" />
    </layout>
    <maximumFileSize value="10MB" />
    <rollingStyle value="Composite" />
    <staticLogFileName value="true" />
  </appender>

  <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{Context}] - %message%newline" />
    </layout>
  </appender>

  <root>
    <level value="ALL" />
    <appender-ref ref="ColorConsoleAppender" />
    <appender-ref ref="RollingFileAppender" />
  </root>

</log4net>

使用以debug模式构建的exe启动服务时,日志记录按预期工作(日志文件在正确的文件路径中创建),但使用以release模式构建的exe时则无法正常工作。
我尝试了重新编译适用于.Net 4.0的log4net dll,并按照这篇博客中提到的步骤进行了操作:http://tseonet.blogspot.com/2010/07/making-log4net-run-on-net-40.html,但依然无法解决问题。
非常感谢您的帮助。
3个回答

8

1
非常感谢Stefan。这很有帮助。通过查看log4net调试消息,我发现存储库未被配置,因为log4net找不到配置。在调试和发布模式下加载程序集的顺序是不同的。不确定这是否是问题所在。 - Deepu
3
我发现log4net使用类型 [log4net.Repository.Hierarchy.Hierarchy] 创建默认仓库[log4net-default-repository],并尝试使用配置来配置该仓库,如果程序集装饰有属性[assembly: log4net.Config.XmlConfigurator(Watch = true)]。对于在发布模式下构建的应用程序,log4net找不到配置,因为加载的程序集未被装饰此属性。将此属性添加到AssemblyInfo文件中可以解决该问题。 - Deepu

4

感谢Deepu

在assemblyInfo文件中添加 [assembly: log4net.Config.XmlConfigurator(Watch = true)] 对我很有效。


1
今天我遇到了同样的问题,经过查看log4net文档后,我采取了以下措施,结果解决了这个问题。
log4net.Config.XmlConfigurator.Configure();

觉得值得分享。以下是使用log4net作为提供程序的日志记录器类。

/// <summary>
/// Logger class using log4net library
/// </summary>
public class Log4NetLogger : ILogger
{
    public Log4NetLogger(Type configType)
    {
        log4net.Config.XmlConfigurator.Configure();
        this._logger = LogManager.GetLogger(configType);
    }

}

对我来说,汇编属性不是一个选项,因为我将日志功能封装到一个单独的程序集中,其中log4net是其中之一的提供者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接