ejemplo coloredconsoleappender application c# log4net log4net-configuration

c# - coloredconsoleappender - niveles de registro y jerarquía de log4net



log4net implementation in c# (7)

Aquí hay un código que dice sobre la prioridad de todos los niveles de 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); }

enter image description here

Este sitio dice

Los madereros pueden tener niveles asignados. Los niveles son instancias de la clase log4net.Core.Level. Los siguientes niveles se definen por orden de prioridad creciente :

  • TODAS
  • DEPURAR
  • INFO
  • ADVERTIR
  • ERROR
  • FATAL
  • APAGADO

DEBUG parece tener la prioridad más baja y ERROR es más alto.

Pregunta

  • Si configuro Min y Max, ejemplo DEBUG y ERROR, imprime todo DEPUR, INFO, ADVERTENCIA y ERROR. Sin uso de filtro mínimo y máximo. Si especifico ERROR (Nivel de registro = ERROR) ¿Incluirá DEBUG, INFO & WARN?

<filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR"/> <param name="LevelMax" value="ERROR"/> </filter>

En lugar de filtro mínimo y máximo. ¿Es posible configurar un nivel e incluir todos los demás niveles debajo de él para el registro?

Ejemplo - Establecer el nivel como Error incluirá DEPURAR, INFO, ADVERTENCIA y ERROR. ¿Es esto posible con log4net?

Publicación de la configuración de log4net basada en uno de los comentarios:

<?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>


Como otros han notado, generalmente es preferible especificar un nivel mínimo de registro para registrar ese nivel y cualquier otro más severo que este. Parece que solo estás pensando en los niveles de registro al revés.

Sin embargo, si desea un control más preciso sobre el registro de niveles individuales, puede indicar a log4net que registre solo uno o más niveles específicos con la siguiente sintaxis:

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

O para excluir un nivel de registro específico al agregar un nodo "denegar" al filtro.

Puede apilar múltiples filtros para especificar múltiples niveles. Por ejemplo, si solo desea niveles WARN y FATAL. Si los niveles que deseaba eran consecutivos, LevelRangeFilter es más apropiado.

Doc de referencia: log4net.Filter.LevelMatchFilter

Si las otras respuestas no le dieron suficiente información, con suerte esto lo ayudará a obtener lo que desea de log4net.


DEBUG mostrará todos los mensajes, INFO todos, además de mensajes DEBUG, y así sucesivamente.
Por lo general, uno usa INFO o WARN. Esto depende de la política de la compañía.


Es cierto que la documentación oficial ( Apache log4net ™ Manual - Introducción ) establece que existen los siguientes niveles ...

  • TODAS
  • DEPURAR
  • INFO
  • ADVERTIR
  • ERROR
  • FATAL
  • APAGADO

... pero curiosamente cuando veo el ensamblado log4net.dll, v1.2.15.0 clase sellada log4net.Core.Level, veo los siguientes niveles definidos ...

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;

He estado usando TRACE junto con PostSharp OnBoundaryEntry y OnBoundaryExit durante mucho tiempo. Me pregunto por qué estos otros niveles no están en la documentación. Además, ¿cuál es la verdadera prioridad de todos estos niveles?


Esto podría ayudar a comprender qué se registra a qué nivel se le pueden asignar niveles a los madereros. Los niveles son instancias de la clase log4net.Core.Level. Los siguientes niveles se definen por orden de gravedad creciente: Nivel de registro.

Número de niveles registrados para cada nivel de configuración:

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


Para la mayoría de las aplicaciones, le gustaría establecer un nivel mínimo pero no un nivel máximo.

Por ejemplo, al depurar su código, establezca el nivel mínimo para DEPURAR, y en producción, ajústelo a ADVERTENCIA.


Prueba así, funcionó para mí

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

Esto registra 3 tipos de errores: error, información y advertencia