【问题标题】:how set default appender in web config?如何在 web config 中设置默认 appender?
【发布时间】:2018-10-09 14:35:09
【问题描述】:

我在网络配置中有 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>

【问题讨论】:

    标签: c# xml web-config


    【解决方案1】:

    解决办法是修改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);

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

    【讨论】:

      【解决方案2】:

      仅在 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 未设置时,此解决方案不起作用。

      【讨论】:

      • 嘿 Jürgen,但是当我从配置文件中删除 LogFileAppender 时,FindAppender 方法返回 null
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 2018-07-29
      • 2022-03-07
      • 2019-01-06
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      相关资源
      最近更新 更多