首页 文章

log4net层次结构和日志记录级别

提问于
浏览
97

This site

可以为 Logger 分配级别 . 级别是log4net.Core.Level类的实例 . 以下级别按优先级递增的顺序定义:ALL DEBUG INFO WARN ERROR FATAL OFF

DEBUG似乎具有最低优先级,ERROR更高 .

  • 如果我设置Min和Max示例DEBUG和ERROR,则打印出DEBUG,INFO,WARN和ERROR . 不使用最小和最大过滤器 . 如果我指定ERROR(Logging level = ERROR)它是否包括DEBUG,INFO和WARN
<filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

而不是最小和最大过滤器 . 是否可以配置级别并包括其下的所有其他级别以进行日志记录 .

示例 - 将级别设置为错误,它将包括DEBUG,INFO,WARN和ERROR . 这可能与log4net一起使用吗?

根据其中一条评论发布log4net配置:

<?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>

7 回答

  • 0

    这可能有助于理解 Logger 可以分配级别的记录级别 . 级别是log4net.Core.Level类的实例 . 以严重性增加的顺序定义以下级别 - 日志级别 .

    每个设置级别记录的级别数:

    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
    
  • 10

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

    例如,在调试代码时,将最低级别设置为DEBUG,并在 生产环境 中将其设置为WARN .

  • 48

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

  • 34

    正如其他人所指出的那样,通常最好指定一个最低日志记录级别来记录该级别以及任何其他更严重的级别 . 看起来你只是在考虑向后记录级别 .

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

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

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

    您可以将多个过滤器堆叠在一起以指定多个级别 . 例如,如果您只想要WARN和FATAL级别 . 如果您想要的级别是连续的,那么LevelRangeFilter更合适 .

    参考文件:log4net.Filter.LevelMatchFilter

    如果其他答案没有给你足够的信息,希望这将帮助你从log4net获得你想要的东西 .

  • 8

    它的真实官方文件(Apache log4net™ Manual - Introduction)表明有以下等级......

    • 全部

    • DEBUG

    • INFO

    • 警告

    • 错误

    • 致命

    • 关闭

    ...但奇怪的是当我查看程序集log4net.dll,v1.2.15.0密封类log4net.Core.Level我看到以下级别已定义...

    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 OnBoundaryEntry和OnBoundaryExit结合使用了很长时间 . 我想知道为什么这些其他级别不在文档中 . 此外,所有这些级别的真正优先事项是什么?

  • 19

    以下是一些有关所有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);
    }
    

    enter image description here

  • 7

    试试这个,它对我有用

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

    这会记录3种类型的错误 - 错误,信息和警告

相关问题