Ответ 1
Для большинства приложений вы хотите установить минимальный уровень, но не максимальный уровень.
Например, при отладке кода установите минимальный уровень в DEBUG, а в процессе производства установите его в WARN.
Этот сайт говорит
Регистраторам могут быть назначены уровни. Уровни - это экземпляры класса log4net.Core.Level. Следующие уровни определены в порядке возрастающего приоритета:
- ALL
- DEBUG
- INFO
- WARN
- ОШИБКА
- FATAL
- OFF
DEBUG имеет наименьший приоритет и ERROR выше.
Вопрос
<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>
Для большинства приложений вы хотите установить минимальный уровень, но не максимальный уровень.
Например, при отладке кода установите минимальный уровень в DEBUG, а в процессе производства установите его в WARN.
DEBUG покажет все сообщения, INFO все кроме сообщений DEBUG и т.д.
Обычно используется либо INFO, либо WARN. Это зависит от политики компании.
Это может помочь понять, что записано на каком уровне Регистраторам могут быть назначены уровни. Уровни - это экземпляры класса 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
Как отмечали другие, обычно желательно указать минимальный уровень ведения журнала для регистрации этого уровня и любых других, более серьезных, чем он. Похоже, вы просто задумываетесь о уровнях ведения журнала назад.
Однако, если вы хотите более мелкомасштабный контроль за протоколированием отдельных уровней, вы можете сообщить log4net для регистрации только одного или нескольких определенных уровней, используя следующий синтаксис:
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="WARN"/>
</filter>
Или для исключения определенного уровня ведения журнала, добавив в фильтр "deny" node.
Вы можете складывать несколько фильтров вместе, чтобы указать несколько уровней. Например, если вы хотите только уровни WARN и FATAL. Если нужные вам уровни были последовательными, то более подходящим является LevelRangeFilter.
Ссылка Doc: log4net.Filter.LevelMatchFilter
Если другие ответы не предоставили вам достаточно информации, надеюсь, это поможет вам получить то, что вы хотите от log4net.
В действительности, официальная документация (Apache log4net ™ Manual - Введение) гласит, что существуют следующие уровни...
... но странно, когда я просматриваю сборку 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 в течение длительного времени. Интересно, почему эти другие уровни не содержатся в документации. Кроме того, каков истинный приоритет всех этих уровней?
Вот некоторый код, рассказывающий о приоритете всех уровней 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);
}