简体   繁体   English

log4net 如何从某些附加程序的代码更改附加程序的日志记录级别

[英]log4net how to change logging level of appender from code of certain appender

I have log4net.config with multiple appender Form C# code i wanted to override minLvel of logging of certain appender我有多个 appender Form C# 代码的 log4net.config 我想覆盖某些 appender 的日志记录的 minLvel

My appender setting is like我的 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>

Following is my Current solution.以下是我当前的解决方案。

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)// one of my appender have one custom filter as well { filterHead = appender.FilterHead.Next; if (filterLevel == null)// 我的一个 appender 也有一个自定义过滤器 { filterHead = appender.FilterHead.Next; filterLevel = filterHead as LevelRangeFilter; 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;
                    }
                }
            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM