简体   繁体   中英

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

My appender setting is like

<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; filterLevel = filterHead as 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;
                    }
                }
            }
        }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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