log4net hierarchy and logging levels

This site says

Loggers may be assigned levels. Levels are instances of the log4net.Core.Level class. The following levels are defined in order of increasing priority:

  • ALL
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • OFF

DEBUG seems to have lowest priority and ERROR is higher.

Question

  • If I set Min and Max example DEBUG and ERROR it prints everthing DEBUG, INFO, WARN and ERROR. Without use of min and max filter. If I specify ERROR (Logging level = ERROR) Will it include DEBUG, INFO & WARN
 <filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR"/>
<param name="LevelMax" value="ERROR"/>
</filter>

Instead of min and max filter. Is it possible to configure a level and include all other levels below it for logging.

Example - Set level as Error it will include DEBUG, INFO, WARN and ERROR. Is this possible with log4net?

Posting log4net config based on one of comments:

     <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections >
<log4net debug="true">
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<layout type="log4net.Layout.XMLLayout" /> -->
<param name="File" value="TestLog.log" />
<param name="AppendToFile" value="false" />
<layout type="log4net.Layout.PatternLayout">
<header type="log4net.Util.PatternString" value="[START LOG] %newline" />
<footer type="log4net.Util.PatternString" value="[END LOG] %newline" />
<conversionPattern value="%d [%t] %-5p - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="ERROR"/>
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
<logger name="log4NetExample">
<!-- <appender-ref ref="B" /> -->
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</logger>
</log4net>

232346 次浏览

对于大多数应用程序,您希望设置最低级别,但不设置最高级别。

例如,在调试代码时,将最小级别设置为 DEBUG,在生产中将其设置为 WARN。

DEBUG 将显示所有消息,除了 DEBUG 消息之外的所有信息,等等。
通常使用 INFO 或者 WARN,这取决于公司的政策。

正如其他人所指出的,通常最好指定一个最小日志记录级别来记录该级别以及任何其他比该级别更严重的日志记录。看起来你只是在反向思考日志记录级别。

但是,如果您希望对记录单个级别进行更细粒度的控制,可以使用以下语法告诉 log4net 只记录一个或多个特定级别:

<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="WARN"/>
</filter>

或者通过向筛选器添加“拒绝”节点来排除特定的日志记录级别。

可以将多个筛选器堆叠在一起以指定多个级别。例如,如果您只想要警告和致命级别。如果您想要的级别是连续的,那么使用 LevelRangeFilter 更合适。

参考文件: 过滤器

如果其他的答案没有给你足够的信息,希望这将有助于你得到你想要的 log4net。

的确,官方文件(Apache log4netTM 手册-简介)声明有以下级别..。

  • 全部
  • 调试
  • 信息
  • 警告
  • 错误
  • 致命
  • 关掉

... 但奇怪的是,当我查看汇编 log4net.dll,v1.2.15.0密封类 log4net.Core。

public static readonly Level Alert;
public static readonly Level All;
public static readonly Level Critical;
public static readonly Level Debug;
public static readonly Level Emergency;
public static readonly Level Error;
public static readonly Level Fatal;
public static readonly Level Fine;
public static readonly Level Finer;
public static readonly Level Finest;
public static readonly Level Info;
public static readonly Level Log4Net_Debug;
public static readonly Level Notice;
public static readonly Level Off;
public static readonly Level Severe;
public static readonly Level Trace;
public static readonly Level Verbose;
public static readonly Level Warn;

很长一段时间以来,我一直在使用 TRACE 与 PostSharp Onbound aryEntry 和 Onbound aryExit 结合使用。我想知道为什么文档中没有这些级别。此外,所有这些级别的真正优先级是什么?

下面是一些关于所有 log4net 级别的优先级的代码:

TraceLevel(Level.All); //-2147483648


TraceLevel(Level.Verbose);   //  10 000
TraceLevel(Level.Finest);    //  10 000
    

TraceLevel(Level.Trace);     //  20 000
TraceLevel(Level.Finer);     //  20 000
    

TraceLevel(Level.Debug);     //  30 000
TraceLevel(Level.Fine);      //  30 000
    

TraceLevel(Level.Info);      //  40 000
TraceLevel(Level.Notice);    //  50 000
    

TraceLevel(Level.Warn);      //  60 000
TraceLevel(Level.Error);     //  70 000
TraceLevel(Level.Severe);    //  80 000
TraceLevel(Level.Critical);  //  90 000
TraceLevel(Level.Alert);     // 100 000
TraceLevel(Level.Fatal);     // 110 000
TraceLevel(Level.Emergency); // 120 000
    

TraceLevel(Level.Off); //2147483647




private static void TraceLevel(log4net.Core.Level level)
{
Debug.WriteLine("{0} = {1}", level, level.Value);
}

这可能有助于理解在什么级别上记录了什么 记录器可以分配级别。级别是 log4net 的实例。核心。等级课程。以下级别是按照严重性增加的顺序定义的——日志级别。

每个设定水平记录的水平数:

 ALL    DEBUG   INFO    WARN    ERROR   FATAL   OFF
•All
•DEBUG  •DEBUG
•INFO   •INFO   •INFO
•WARN   •WARN   •WARN   •WARN
•ERROR  •ERROR  •ERROR  •ERROR  •ERROR
•FATAL  •FATAL  •FATAL  •FATAL  •FATAL  •FATAL
•OFF    •OFF    •OFF    •OFF    •OFF    •OFF    •OFF

像这样试试,对我很有效

<root>
<!--<level value="ALL" />-->
<level value="ERROR" />
<level value="INFO" />
<level value="WARN" />
</root>

这将记录3种类型的错误——错误、信息和警告

您可以将其用于某些日志警告: (添加到 appender)

<filter type="log4net.Filter.LevelMatchFilter">
<acceptOnMatch value="true" />
<levelToMatch value="WARN" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />

如果要将日志错误发送到警报范围:

<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="ALERT" />
</filter>