【问题标题】:log4net how to change logging level of appender from code of certain appenderlog4net 如何从某些附加程序的代码更改附加程序的日志记录级别
【发布时间】:2020-11-13 13:43:40
【问题描述】:

我有带有多个附加程序的 log4net.config 表单 C# 代码我想覆盖某些 appender 的 minLvel 日志记录

我的 appender 设置是这样的

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
        <file value="..\\Logs\\Api" />
        <encoding value="utf-8" />
        <appendToFile value="true" />
        <datePattern value="_yyyyMMdd'.log'" />
        <staticLogFileName value="false" />
        <rollingStyle value="Composite"/>
        <maxSizeRollBackups value="-1"/>
        <maximumFileSize value="10MB"/>
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <acceptOnMatch value="true" />
            <levelMin value="DEBUG" />
            <levelMax value="FATAL" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff}&#9;%p&#9;%t&#9;%property{Ip}&#9;%property{Context}&#9;%property{ContextId}&#9;%c{1}&#9;%m%n" />
        </layout>
    </appender>

【问题讨论】:

  • 有人知道吗?

标签: c# log4net


【解决方案1】:

以下是我目前的解决方案。

private static void SetFilterMinLogLevel(AppenderSkeleton appender, string inputLevel)
        {
            if (!String.IsNullOrWhiteSpace(inputLevel))
            {
                inputLevel = inputLevel.ToLower().Trim();
                IFilter filterHead = appender.FilterHead;
                LevelRangeFilter filterLevel = filterHead as LevelRangeFilter;

if (filterLevel == null)// 我的一个 appender 也有一个自定义过滤器 { filterHead = appender.FilterHead.Next; filterLevel = filterHead 作为 LevelRangeFilter; ;

            }
                if (filterLevel != null)
                {
                    switch (inputLevel)
                    {
                        case "info":
                            filterLevel.LevelMin = log4net.Core.Level.Info;//todo
                            break;
                        case "debug":
                            filterLevel.LevelMin = log4net.Core.Level.Debug;//todo
                            break;
                        case "warn":
                            filterLevel.LevelMin = log4net.Core.Level.Warn;//todo
                            break;
                        case "error":
                            filterLevel.LevelMin = log4net.Core.Level.Error;//todo
                            break;
                        case "fatal":
                            filterLevel.LevelMin = log4net.Core.Level.Fatal;//todo
                            break;
                        case "off":
                            filterLevel.LevelMin = filterLevel.LevelMax = log4net.Core.Level.Off;//trying to check switching off logs
                            break;
                        default:
                            Logger.DebugFormat("Unknown Log level {0}",inputLevel);
                            break;
                    }
                }
            }
        }

【讨论】:

  • 小幅增强,因为一个附加程序有一个自定义过滤器,这在它上面不起作用。如果可能的话,还要检查我是否也可以关闭日志记录
猜你喜欢
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-23
相关资源
最近更新 更多