logmanager - log4j netbeans
Log4j-explicación del concepto de valor de prioridad y nombre de parámetro (1)
El componente Logger
acepta las instrucciones de registro ( logger.debug()
, logger.error()
etc. llamadas) y las envía a los destinos correspondientes a los Appender
.
Puede establecer una "prioridad" en el Logger
e indicarle que acepte solo las instrucciones de registro de un determinado nivel. Los niveles son (en orden de importancia ascendente): TRACE, DEBUG, INFO, WARN, ERROR y FATAL.
Una configuración como esta:
<logger name="com.sas">
<priority value="WARN" />
....
</logger>
indica al com.sas
logger que solo acepte niveles con un nivel de importancia WARN o superior (es decir, WARN, ERROR y FATAL).
Las declaraciones de registro se envían luego a Appender
s. Los agregadores también pueden configurarse para aceptar solo declaraciones de un cierto nivel de importancia, uno por encima de un cierto "umbral".
Una configuración como:
<appender name="B2BAPP" class="org.apache.log4j.RollingFileAppender">
<param name="Threshold" value="ERROR"/>
....
</appender>
le dice al appender que solo acepte declaraciones de importancia ERROR o superior (es decir, ERROR y FATAL).
¿Entonces el nivel de registro para "com.sas" se establecería en "DEBUG" o "ERROR"?
En su ejemplo, el nivel de registro se establece en DEBUG. Lo que se escribe por los agregadores es ortogonal al problema.
En cuanto a sus dos ejemplos:
valor de prioridad = "DEBUG" y nombre de parámetro = "Umbral" valor = "ERROR"
valor de prioridad = "ERROR" y nombre de parámetro = "Umbral" valor = "DEBUG"
1. La prioridad del registrador establecida en DEBUG y el umbral del agregador establecido en ERROR significa que el registrador pasa a DEBUG, INFO, WARN, ERROR y FATAL, pero Appender solo acepta ERROR y FATAL, por lo que solo obtiene ERROR y FATAL en su registro.
2. La prioridad del registrador establecida en ERROR y el umbral del agregador establecido en DEBUG significa que el registrador solo pasa ERROR y FATAL, mientras que el agregador acepta DEBUG, INFO, WARN, ERROR y FATAL. Nuevamente obtienes solo ERROR y FATAL en tu registro.
Pero eso es solo un caso desafortunado. Mezclar la prioridad y el umbral puede proporcionarte una buena funcionalidad. Por ejemplo...
... suponga que acaba de colocar una aplicación en el escenario y necesita monitorearla un poco hasta que la mueva a producción. Tienes un desarrollador y un administrador del sistema haciendo el monitoreo. Mientras que el desarrollador desea todos los registros, el administrador del sistema está ocupado y solo quiere ver los errores.
¿Cómo configuras eso? Qué tal algo como esto:
<appender name="developerLogs" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/LOGS/SAM/developerLogs.log" />
<param name="Threshold" value="DEBUG" />
<param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
<appender name="sysAdminLogs" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/LOGS/SAM/sysAdminLogs.log" />
<param name="Threshold" value="ERROR" />
<param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%m%n"/>
</layout>
</appender>
<logger name="com.test">
<priority value="DEBUG" />
<appender-ref ref="developerLogs" />
<appender-ref ref="sysAdminLogs" />
</logger>
Si ejecuta código como:
Logger logger = Logger.getLogger("com.test");
logger.debug("some debug statement");
logger.info("some info statement");
logger.warn("some warn statement");
logger.error("some error statement");
logger.fatal("some fatal statement");
obtienes esto en sysAdminLogs.log
:
some error statement
some fatal statement
y esto en developerLogs.log
:
some debug statement
some info statement
some warn statement
some error statement
some fatal statement
Espero que esta explicación describa mejor los conceptos.
Mi log4j.xml
:
<appender name="B2BAPP" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="/LOGS/SAM/B2B_VJ.log"/>
<param name="Threshold" value="ERROR"/>
<param name="MaxFileSize" value="10000KB"/>
<param name="MaxBackupIndex" value="10"/>
<param name="Append" value="false"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss,SSS} %5p [%c:%L] %m%n"/>
</layout>
</appender>
<logger name="com.sas">
<priority value="DEBUG"/>
<appender-ref ref="B2BAPP"/>
</logger>
Me gustaría entender el comportamiento del valor de prioridad = "DEBUG" y el nombre de param = "Umbral" value = "DEBUG" .
En mi registrador ( com.sas
) establecí el valor de prioridad "DEBUG" y el agregador de este registrador es "B2BAPP" y en "B2BAPP" definí "Umbral" como "ERROR".
¿Entonces el nivel de registro para "com.sas" se establecería en "DEBUG" o "ERROR"?
Casos :
valor de prioridad = "DEBUG" y nombre de parámetro = "Umbral" valor = "ERROR"
valor de prioridad = "ERROR" y nombre de parámetro = "Umbral" valor = "DEBUG"
¿Cuál sería la salida de los casos anteriores? ¿Como funciona?