【问题标题】:log4net doesn't log when running a .Net 4.0 Windows application built in Release mode运行以发布模式构建的 .Net 4.0 Windows 应用程序时,log4net 不记录
【发布时间】:2010-10-28 16:49:11
【问题描述】:

我有一个使用 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>

当服务启动时使用以调试模式构建的 exe(日志文件在正确的文件路径中创建)时,日志记录按预期工作,但在使用以发布模式构建的 exe 时不起作用。

我尝试按照此博客中提到的步骤为 .Net 4.0 使用重新编译的 log4net dll。http://tseonet.blogspot.com/2010/07/making-log4net-run-on-net-40.html

但是,那也没用。

非常感谢任何帮助。

【问题讨论】:

    标签: .net-4.0 log4net


    【解决方案1】:

    我建议按照这里的说明打开内部调试:

    log4net - Appenders not working in IIS7.5

    【讨论】:

    • 非常感谢斯特凡。这有帮助。查看 log4net 调试消息,我可以看到存储库没有被配置,因为 log4net 找不到配置。在调试和发布模式下加载程序集的顺序不同。不确定这是否是这里的问题。
    • 我可以看到 log4net 使用类型 [log4net.Repository.Hierarchy.Hierarchy] 创建默认存储库 [log4net-default-repository],然后如果程序集被修饰,则尝试使用配置配置存储库具有属性 [程序集:log4net.Config.XmlConfigurator(Watch = true)]。在发布模式下构建的应用程序的情况下,log4net 找不到配置,因为加载的程序集没有使用此属性修饰。将此属性添加到 AssemblyInfo 文件解决了问题。
    【解决方案2】:

    谢谢迪普

    将 [assembly: log4net.Config.XmlConfigurator(Watch = true)] 添加到对我有用的 assemblyInfo 文件

    【讨论】:

      【解决方案3】:

      我今天偶然发现了同样的问题,在经历了log4net docs 之后,我做了以下事情,它对我有用。

      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 是提供者之一。

      【讨论】:

        猜你喜欢
        • 2013-08-23
        • 1970-01-01
        • 2011-03-21
        • 1970-01-01
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        相关资源
        最近更新 更多