warn the see rootlogger properly projectresourcebundle please org noconfig net more logger javamelody initialize info i18n found for faq ejemplo debug could bull appenders .net configuration logging log4net

.net - the - ¿Cómo puedo filtrar en un nivel personalizado en log4net?



please initialize the log4j system properly. (2)

Necesitarás agregar

<level> <name value="AUDIT" /> <value value="35000" /> </level>

en tu sección de configuración de log4net.

Copié los ejemplos de log4net para implementar un nivel de registro personalizado, AUDIT. Definí que AUDIT tenía un valor de 35000, entre DEBUG 30000 e INFO 40000.

La siguiente es mi sección de configuración. Tengo un appender que registra todos los niveles y uno que se supone que solo registra los niveles de AUDIT (esto es solo para probar)

<log4net> <appender name="FileAppender" type="log4net.Appender.FileAppender" > <file value="testrun.log" /> <layout type="log4net.Layout.PatternLayout" > <conversionPattern value="%date{HH:mm:ss:fff} [%thread] %-5level %logger{1} - %message%newline" /> </layout> </appender> <appender name="FileAppender.Audit" type="log4net.Appender.FileAppender" > <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="AUDIT" /> </filter> <file value="testrun.audit.log" /> <layout type="log4net.Layout.PatternLayout" > <conversionPattern value="%date{HH:mm:ss:fff} [%thread] %-5level %logger{1} - %message%newline" /> </layout> </appender> <root> <level value="ALL" /> <appender-ref ref="FileAppender" /> <appender-ref ref="FileAppender.Audit" /> </root> </log4net>

El método de prueba es

private static readonly IAuditLog log = AuditLogManager.GetLogger(typeof(Program)); public static void Main() { log.Debug("Debug"); log.Audit("Audit"); log.Info("Info"); }

Sin embargo, la salida de los appenders es la misma ...

13:09:11:540 [9] DEBUG Program - Debug 13:09:11:560 [9] AUDIT Program - Audit 13:09:11:560 [9] INFO Program - Info

La salida de depuración de log4net al analizar LevelMatchFilter es

log4net: Loading Appender [FileAppender.Audit] type: [log4net.Appender.FileAppender] log4net:ERROR XmlHierarchyConfigurator: Unknown Level Specified [AUDIT] log4net:WARN Unable to set property [levelToMatch] on object [log4net.Filter.LevelMatchFilter] using value [AUDIT] (with acceptable conversion types) log4net: Setting Collection Property [AddFilter] to object [log4net.Filter.LevelMatchFilter]


log4net versión 1.2.10 requiere que finalice una cadena LevelMatchFilter con un DenyAllFilter si desea el comportamiento que describí en la pregunta.

<appender name="FileAppender.Audit" type="log4net.Appender.FileAppender" > <filter type="log4net.Filter.LevelMatchFilter"> <levelToMatch value="AUDIT" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> <file value="testrun.audit.log" /> <layout type="log4net.Layout.PatternLayout" > <conversionPattern value="%date{HH:mm:ss:fff} [%thread] %-5level %logger{1} - %message%newline" /> </layout> </appender>