es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Declarando varios appenders en el archivo log4j2.properties

En el mismo archivo log4j2.properties, quiero declarar varios appenders, digamos ‘XXX’ y ‘YYY’.

El problema es que con esta configuración:

#GENERIC
rootLogger.level = DEBUG
rootLogger.appenderRefs = XXX, YYY
appenders = XXX, YYY
loggers = XXX, YYY

#XXX
rootLogger.appenderRef.XXX.ref = XXX
logger.XXX.name = XXX
logger.XXX.level = DEBUG
property.XXX.filename = C:/logs/XXX.log
appender.XXX.type = RollingFile
appender.XXX.name = XXX
appender.XXX.fileName = ${XXX.filename}
appender.XXX.filePattern = ${XXX.filename}.%d{yyyy-MM-dd}
appender.XXX.layout.type = PatternLayout
appender.XXX.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
appender.XXX.policies.type = Policies
appender.XXX.policies.time.type = TimeBasedTriggeringPolicy
appender.XXX.policies.time.interval = 1

#YYY
rootLogger.appenderRef.YYY.ref = YYY
logger.YYY.name = YYY
logger.YYY.level = DEBUG
property.YYY.filename = C:/logs/YYY.log
appender.YYY.type = RollingFile
appender.YYY.name = YYY
appender.YYY.fileName = ${YYY.filename}
appender.YYY.filePattern = ${YYY.filename}.%d{yyyy-MM-dd}
appender.YYY.layout.type = PatternLayout
appender.YYY.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
appender.YYY.policies.type = Policies
appender.YYY.policies.time.type = TimeBasedTriggeringPolicy
appender.YYY.policies.time.interval = 1

Utilizando esto, el mensaje de registro se rastrea en el archivo XXX.log y también en el archivo YYY.log.

Logger log = Logger.getLogger("XXX");
log.info("Alguna información en el registro");

¿Alguien sabe qué estoy haciendo mal?
¿Cuál es la configuración mínima requerida considerando que necesito declarar muchos appenders en el mismo archivo properties?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que los mensajes de registro se tracen correctamente en los apéndices específicos, es necesario especificar la referencia del apéndice en el método getLogger. Por ejemplo:

    Logger logXXX = Logger.getLogger("XXX");
    logXXX.info("Alguna información para el registro del apéndice XXX");
    
    Logger logYYY = Logger.getLogger("YYY");
    logYYY.info("Alguna información para el registro del apéndice YYY");
    

    En la configuración inicial mostrada anteriormente, ambos apéndices son referenciados por el rootLogger. Por lo tanto, independientemente de la referencia del apéndice proporcionada en el método getLogger, el mensaje de registro será trazado en ambos apéndices.

    Para evitar esto, puedes eliminar las referencias a los apéndices en el rootLogger y solo declararlos en los registradores específicos donde sean necesarios. Por ejemplo:

    #GENERIC
    rootLogger.level = DEBUG
    #eliminar rootLogger.appenderRefs y las declaraciones de apéndices
    
    #XXX
    logger.XXX.name = XXX
    logger.XXX.level = DEBUG
    property.XXX.filename = C:/logs/XXX.log
    appender.XXX.type = RollingFile
    appender.XXX.name = XXX
    appender.XXX.fileName = ${XXX.filename}
    appender.XXX.filePattern = ${XXX.filename}.%d{yyyy-MM-dd}
    appender.XXX.layout.type = PatternLayout
    appender.XXX.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
    appender.XXX.policies.type = Policies
    appender.XXX.policies.time.type = TimeBasedTriggeringPolicy
    appender.XXX.policies.time.interval = 1
    #agregar referencia de apéndice a logger.XXX
    logger.XXX.appenderRef.XXX.ref = XXX
    
    #YYY
    logger.YYY.name = YYY
    logger.YYY.level = DEBUG
    property.YYY.filename = C:/logs/YYY.log
    appender.YYY.type = RollingFile
    appender.YYY.name = YYY
    appender.YYY.fileName = ${YYY.filename}
    appender.YYY.filePattern = ${YYY.filename}.%d{yyyy-MM-dd}
    appender.YYY.layout.type = PatternLayout
    appender.YYY.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
    appender.YYY.policies.type = Policies
    appender.YYY.policies.time.type = TimeBasedTriggeringPolicy
    appender.YYY.policies.time.interval = 1
    #agregar referencia de apéndice a logger.YYY
    logger.YYY.appenderRef.YYY.ref = YYY
    

    Con esta configuración, solo se utilizarán los apéndices referenciados en cada registrador cuando se traze un mensaje de registro. Además, se pueden declarar tantos apéndices como sea necesario en el mismo archivo de propiedades, simplemente siguiendo la misma sintaxis mostrada para los apéndices XXX y YYY.

Comments are closed.