log4net иерархия и уровни ведения журнала

127

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

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

  • ВСЕ
  • ОТЛАЖИВАТЬ
  • ИНФОРМАЦИЯ
  • WARN
  • ОШИБКА
  • FATAL
  • OFF

DEBUG имеет самый низкий приоритет, а ERROR - выше.

Вопрос

  • Если я установил Min и Max example DEBUG и ERROR, он распечатает все DEBUG, INFO, WARN и ERROR. Без использования минимального и максимального фильтров. Если я укажу ERROR (уровень ведения журнала = ERROR) Будет ли он включать DEBUG, INFO & WARN
 <filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR"/>
     <param name="LevelMax" value="ERROR"/>
 </filter>

Вместо фильтра min и max. Можно ли настроить уровень и включить все остальные уровни ниже для ведения журнала.

Пример - Установите уровень как Ошибка, он будет включать ОТЛАДКУ, ИНФОРМАЦИЮ, ПРЕДУПРЕЖДЕНИЕ и ОШИБКУ. Возможно ли это с 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>

Сива
источник
Вы пытались установить уровень ведения журнала INFO и проверяли, включает ли он INFO и DEBUG?
По умолчанию
5
DEBUG, кажется, имеет самый низкий приоритет, а ошибка - самый высокий. Это не приоритет , но порог выше или выше, сообщение будет зарегистрировано.
R. Schreurs
Вы пробовали только использовать levelMax? Я думаю , что это должно включать в себя все , что ниже его , если вы не укажетеlevelMin
AN

Ответы:

90

Это может помочь понять, что записывается, на каком уровне Регистраторам могут быть назначены уровни. Уровни являются экземплярами класса 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
Мел Пама
источник
2
Извините, я думал, что это wswg, почему это не так ??
Мел Пама
1
Вы можете взглянуть на эту часть сайта для правильного форматирования ответов
Джарод Мозер
36

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

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

Илья Коган
источник
Пожалуйста, проверьте мой обновленный вопрос, Мой вопрос касается уровней и отчетов журнала
Шива
Перейдите <level value="ALL" /> на, <level value="WARN" />и вы получите только предупреждения и ошибки.
Илья Коган
2
Нет, это не поможет. Я пытался изменить. Я не видел журналов с включенным приоритетом ниже
Siva
12
Конечно, вы не увидите журналов с приоритетом ниже. Это минимальный приоритет, который вы устанавливаете.
Илья Коган
19

DEBUG покажет все сообщения, INFO - все, кроме сообщений DEBUG, и так далее.
Обычно используется либо ИНФОРМАЦИЯ, либо ПРЕДУПРЕЖДЕНИЕ. Это зависит от политики компании.

weismat
источник
Пожалуйста, проверьте мой обновленный вопрос, Мой вопрос касается уровней и отчетов журнала
Шива
Пожалуйста, опубликуйте всю конфигурацию log4Net, возможно, вам мешают два регистратора.
weismat
И я лично пока использовал только настройку уровня. Я думаю, что по возможности следует избегать установки Min / Max.
weismat
Я выложил всю конфигурацию log4net. Пожалуйста, проверьте. Пытаюсь изучить и внедрить.
Siva
16

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

Мохамед-Али МААМАР
источник
10

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

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

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

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

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

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

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

ulty4life
источник
ах, отрицание - это то, что я лично искал. хотел бы получить информацию + сообщения об ошибках, но не отладить. Спасибо за это.
Sarfaraaz
by adding a "deny" node to the filterкак?
mrhotroad
@mrhotroad Я не уверен, насколько текущая версия log4net отличается от версии 2014 года, но вот документ по LevelMatchFilter.AcceptOnMatch. logging.apache.org/log4net/release/sdk/html/… Итак, вы можете сделать <levelToMatch value = "WARN" AcceptOnMatch = "false" />
ulty4life
8

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

  • ВСЕ
  • ОТЛАЖИВАТЬ
  • ИНФОРМАЦИЯ
  • WARN
  • ОШИБКА
  • 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. Интересно, почему этих других уровней нет в документации. Кроме того, каков истинный приоритет всех этих уровней?

barrypicker
источник
2
Как бы то ни было, все они перечислены по следующей ссылке, но, похоже, они давно не обновляли свои руководства. logging.apache.org/log4net/release/sdk/html/…
Dinerdo,
2
Уровень Fine; Уровень Finer; Уровень Finest; С этого момента я просто буду использовать эти три.
maembe
-3

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

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

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

Дананай
источник
7
Согласно документации log4net для Root Logger: «level: необязательный элемент, разрешен максимум один . Определяет уровень ведения журнала для этого регистратора. Этот регистратор будет принимать только события этого уровня или выше »
gonadarian
Почему этот ответ не поддержал? У меня тоже работает. Отсюда голосование.
amilamad
1
Потому что <level value = "WARN" /> было бы достаточно.
rlesias