如何在网络配置中设置默认附加程序?

how set default appender in web config?

我在 web 配置中有 2 个 appender,第一个在 xml 文件中保存日志,另一个使用外部 API 保存日志,我的问题是:

我需要设置我的默认 appender 只是调用外部 API,不需要保存在 xml 文件上,如果 api reutred 失败,我想使用日志记录通过 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>

仅在 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;
}

也看看thispost。

编辑 当未设置 LogFileAppender 的 appender-ref 时,此解决方案不起作用。

解决方法是修改appender的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