簡體   English   中英

log4net 如何從某些附加程序的代碼更改附加程序的日志記錄級別

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

我有多個 appender Form C# 代碼的 log4net.config 我想覆蓋某些 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>

以下是我當前的解決方案。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM