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

时间:2012-01-19 12:58:51

标签: c# log4net log4net-configuration

This site

  

可以为记录器分配级别。级别是log4net.Core.Level类的实例。以提高优先级

的顺序定义了以下级别      
      
  • 所有的
  •   
  • 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>

代替min和max过滤器。是否可以配置级别并包括其下的所有其他级别以进行日志记录。

示例 - 将level设置为Error它将包括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 :(得分:66)

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

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

os.remove("C:/Users/%s/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/" + file

答案 1 :(得分:34)

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

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

答案 2 :(得分:19)

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

答案 3 :(得分:10)

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

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

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

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

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

参考文档:log4net.Filter.LevelMatchFilter

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

答案 4 :(得分:9)

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

答案 5 :(得分:8)

官方文件(Apache log4net™ Manual - Introduction)确实存在以下等级......

  • 所有的
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • OFF

...但奇怪的是当我查看程序集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结合使用了很长时间。我想知道为什么这些其他级别不在文档中。此外,所有这些级别的真正优先事项是什么?

答案 6 :(得分:-2)

尝试这样,它对我有用

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

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

相关问题