GetAppenders()返回log4net中的空列表

本文关键字:列表 log4net 返回 GetAppenders | 更新日期: 2023-09-27 18:22:11

我有以下方法来获取log4net中日志文件的名称:

private string GetLogFile()
    {
        var repo = LogManager.GetRepository();
        var fileAppender = repo.GetAppenders()
            .OfType<FileAppender>().Single(fa => fa.Name == "LogFileAppender");
        var logFile = fileAppender != null ? fileAppender.File : string.Empty;
        return logFile;
    }

当我在Windows服务中运行此代码时,此代码工作正常。但我被赋予了将日志记录转移到主要网络应用程序的任务。因此,我在web应用程序中引用了log4net,移动了配置设置等。但现在,当我运行相同的代码时,对GetAppenders()的调用返回一个空列表。

这是我的配置:

  <log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <param name="File" value="''MYSERVER'Temp'MYFiles'Log'Log.txt" />
      <param name="AppendToFile" value="true" />      
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
      </layout>
    </appender>
    <root>
          <level value="ALL" />      
          <appender-ref ref="LogFileAppender" />
        </root>
  </log4net>

我需要在网络应用程序版本中执行额外的步骤吗?

GetAppenders()返回log4net中的空列表

Application_Start方法中的Global.asax.cs文件中缺少一些内容。我需要添加以下行:

log4net.Config.XmlConfigurator.Configure();

您还需要调用文件顶部的其他配置部分,例如:

  <configSections>
      <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
      <sectionGroup name="common">
          <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
      </sectionGroup>
  </configSections>

以及在您的log4net元素之上添加以下内容:

<common>
    <logging>
        <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net">
            <arg key="configType" value="INLINE" />
        </factoryAdapter>
    </logging>
</common>

这就假设您使用的是Common.Logging,而不是使用独立的配置文件(意味着配置在web.config中)。