[英]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}	%p	%t	%property{Ip}	%property{Context}	%property{ContextId}	%c{1}	%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.