簡體   English   中英

GetAppenders()在log4net中返回空列表

[英]GetAppenders() returns empty list in log4net

我有以下方法可在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應用程序的任務。 因此,我在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>

我需要在Web應用程序版本中執行額外的步驟嗎?

原來是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中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM