иерархия log4net и уровни ведения журнала - PullRequest
111 голосов
/ 19 января 2012

Этот сайт говорит

Регистраторам могут быть назначены уровни. Уровни являются экземплярами класса log4net.Core.Level. Следующие уровни определены в порядке увеличения приоритета :

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

Похоже, что отладка имеет самый низкий приоритет, а ОШИБКА выше.

Вопрос

  • Если я установлю Мин и Макс, например, DEBUG и ERROR, то будет напечатано DEBUG, INFO, WARN и ERROR. Без использования минимального и максимального фильтра. Если я укажу ОШИБКА (Уровень ведения журнала = ОШИБКА) Будет ли она включать ОТЛАДКУ, ИНФО и ПРЕДУПРЕЖДЕНИЕ
 <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 ]

70 голосов
/ 17 ноября 2016

Это может помочь понять, что записано на каком уровне Регистраторам могут быть назначены уровни. Уровни являются экземплярами класса 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
34 голосов
/ 19 января 2012

Для большинства приложений вы хотели бы установить минимальный уровень, но не максимальный уровень.

Например, при отладке вашего кода установите минимальный уровень DEBUG, а в производственном процессе установите его на WARN.

19 голосов
/ 19 января 2012

DEBUG покажет все сообщения, INFO все, кроме сообщений DEBUG, и т. Д.
Обычно используется либо INFO, либо WARN.Это зависит от политики компании.

10 голосов
/ 05 декабря 2014

Как отмечали другие, обычно предпочтительно указывать минимальный уровень ведения журнала, чтобы регистрировать этот уровень, а также любые другие, более серьезные, чем он.Похоже, вы просто думаете об уровнях ведения журнала в обратном направлении.

Однако, если вы хотите более детального контроля над ведением журнала отдельных уровней, вы можете указать log4net регистрировать только один или несколько конкретных уровней, используя следующий синтаксис:

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

Или чтобы исключить определенный уровень ведения журнала, добавив в фильтр «запрещающий» узел.

Вы можете сложить несколько фильтров вместе, чтобы указать несколько уровней.Например, если вы хотели только уровни WARN и FATAL.Если требуемые уровни были последовательными, то более подходящим является LevelRangeFilter.

Справочный документ: log4net.Filter.LevelMatchFilter

Если другие ответы не дали вамдостаточно информации, надеюсь, это поможет вам получить то, что вы хотите из log4net.

9 голосов
/ 07 ноября 2016

Вот код, который говорит о приоритете всех уровней 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);
}

введите описание изображения здесь

8 голосов
/ 14 апреля 2016

В официальной документации ( Руководство по Apache log4net ™ - Введение ) указано, что существуют следующие уровни ...

  • ALL
  • 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. Интересно, почему этих других уровней нет в документации. Кроме того, каков истинный приоритет всех этих уровней?

0 голосов
/ 09 января 2018

Попробуйте вот так, у меня это сработало

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

В нем регистрируются 3 типа ошибок - ошибки, информация и предупреждение

...