Как установить Appender по умолчанию в веб-конфигурации? - PullRequest
0 голосов
/ 08 октября 2018

у меня есть 2 appender в веб-конфигурации, первый сохраняет журналы в xml-файле, а другой сохраняет журналы с использованием внешнего API, моя проблема:

мне нужно установить appender по умолчанию - просто вызывать внешний API, нет необходимости сохранять в файл XML, и, если API-интерфейс не удалось, я хочу использовать протоколирование по файлу XML (я сделал это во время выполнения).Основной вопрос: как установить первый appender по умолчанию для входа в файл web.config

web.config:

<log4net>
     <!--workflow logging-->
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
      <param name="File" value="C:/Workspaces/workflowLog/workflow-info.xml" />
      <param name="AppendToFile" value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="Tahaluf.Workflow.Common.Core.Log.WorkFlowXmlLayout" />
    </appender>




    <!--Connect to Tahaluf Logging-->
    <appender name="WorkFlowAppender" type="Tahaluf.Workflow.Common.Core.Log.WorkFlowAppender"> 
    </appender>

    <root>
      <level value="ALL"  />
      <appender-ref ref="WorkFlowAppender"  />
      <appender-ref ref="LogFileAppender" />
    </root>
  </log4net>

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Решение состоит в том, чтобы изменить Threshold приложения.

web.config:

<root>
  <level value="ALL"  />
  <appender-ref ref="WorkFlowAppender"  />
  <appender-ref ref="LogFileAppender" />
</root>

Добавить метод:

public static void SetThreshold(string appenderName, log4net.Core.Level threshold)
    {
        foreach (log4net.Appender.AppenderSkeleton appender in log4net.LogManager.GetRepository().GetAppenders())
        {
            if (appender.Name == appenderName)
            {
                appender.Threshold = threshold;
                break;
            }
        }
    }

Отключить приложение.: SetThreshold("LogFileAppender", log4net.Core.Level.Off);

Включить appender: SetThreshold("LogFileAppender", log4net.Core.Level.Debug); Уровень может быть любым допустимым уровнем (не только Debug)

0 голосов
/ 08 октября 2018

Настройте ваш стандартный приложение только в файле web.config.Вы хотите использовать WorkFlowAppender, поэтому удалите LogFileAppender.

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

Если вам нужно использовать LogFileAppender позже, вы добавляете его по коду.

// Add an appender to a logger
public void AddAppender(string loggerName,
log4net.Appender.IAppender appender)
{
  log4net.ILog log = log4net.LogManager.GetLogger(loggerName);
  log4net.Repository.Hierarchy.Logger l =
(log4net.Repository.Hierarchy.Logger)log.Logger;

  l.AddAppender(appender);
}

// Find a named appender already attached to a logger
public log4net.Appender.IAppender FindAppender(string
appenderName)
{
  foreach (log4net.Appender.IAppender appender in
log4net.LogManager.GetRepository().GetAppenders())
  {
    if (appender.Name == appenderName)
    {
      return appender;
    }
  }
  return null;
}

Взгляните на эту запись.

Редактировать Это решение не работает, если appender-ref для LogFileAppender не установлен.

...