Подтвердить что ты не робот

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

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

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

  • ALL
  • DEBUG
  • INFO
  • WARN
  • ОШИБКА
  • FATAL
  • OFF

DEBUG имеет наименьший приоритет и ERROR выше.

Вопрос

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

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

Пример. Задайте уровень как Ошибка, он будет включать в себя 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>

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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

Или для исключения определенного уровня ведения журнала, добавив в фильтр "deny" node.

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

Ссылка Doc: log4net.Filter.LevelMatchFilter

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

Ответ 5

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

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

Ответ 6

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

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