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

时间:2018-10-08 08:41:47

标签: c# xml web-config

我在Web配置中有2个追加程序,第一个将日志保存在xml文件中,另一个使用外部API保存日志,我的问题是:

我需要设置我的默认附加程序是仅调用外部API,无需保存在xml文件上,并且如果api reutred失败,我想使用按xml文件记录(我在运行时进行了记录)。 主要问题:登录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 :(得分:2)

解决方案是修改附加程序的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);

打开附加程序:SetThreshold("LogFileAppender", log4net.Core.Level.Debug); 级别可以是任何有效级别(不仅是Debug

答案 1 :(得分:0)

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

也看一下this帖子。

修改 如果未设置LogFileAppender的appender-ref,则此解决方案不起作用。