property pattern name logger logging slf4j logback

logging - name - logback pattern



Anular configuraciones de logback (2)

¿Hay alguna manera de que podamos anular las configuraciones de logback? Sé que definimos las configuraciones de logback en el archivo llamado logback.xml (generalmente almacenado en la ruta src / resources) y sé que al usar la etiqueta <include> podemos configurar un archivo externo para agregarlo a logback.xml como se muestra a continuación :

<configuration> <!--<include url="file:///d:/ServerConfig.xml"/>--> <include file="${outPut}/ServerConfig.xml"/> <logger name="Server" LEVEL="DEBUG"> <appender-ref ref="FILEOUT" /> </logger> <root level="DEBUG"> <appender-ref ref="STDOUT" /> <!--<appender-ref ref="FILEOUT" />--> </root> </configuration>

Pero, ¿qué sucede si deseo anular esta configuración predeterminada (por ejemplo, configurar el registrador raíz, nivel a INFO)?

por cierto aquí está el archivo incluido:

<included> <!-- <property file="d:/ServerSysVar.properties"/>--> <property file="${outPut}/ServerSysVar.properties"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="FILEOUT" class="ch.qos.logback.core.FileAppender"> <file>${Sys_Location}/Serverfile4.log</file> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} %class{36}.%M %L CLIENT_PORT:%X{ClientPort}- %msg%n</pattern> </encoder> </appender> <logger name="Service" LEVEL="DEBUG"> <appender-ref ref="FILEOUT" /> </logger> <root> <appender-ref ref="STDOUT" /> <!-- <appender-ref ref="FILEOUT" />--> </root> </included>


No creo que pueda sobrescribir las logback.xml logback.xml de un archivo incluido.

Pero tengo un enfoque que resuelve su pregunta con respecto a la anulación del nivel de logger raíz, utilizando la sustitución de variables con valores predeterminados:

logback.xml

<configuration> <include file="includedFile.xml" /> <!-- STDOUT appender stuff --> <root level="${root.level:-DEBUG}"> <appender-ref ref="STDOUT" /> </root> <configuration>

includedFile.xml

<included> <!-- override the default value; or comment out to leave it at default --> <property name="root.level" value="INFO" /> </included>

Con ese concepto, incluso he podido controlar la salida a varios agregadores desde el archivo incluido:

logback.xml

<configuration> <include file="includedFile.xml" /> <!-- STDOUT appender stuff --> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>${file.level:-ALL}</level> </filter> <file>/path/to/logfeil.log</file> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="SYSLOG" class="ch.qos.logback.classic.net.SyslogAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>${syslog.level:-OFF}</level> </filter> <syslogHost>localhost</syslogHost> <facility>${syslog.facility:-LOCAL1}</facility> <suffixPattern>${syslog.pattern:-[%thread] %logger{36} - %msg}</suffixPattern> </appender> <logger name="my.package" level="${logging.level:-INFO}" additivity="false"> <appender-ref ref="FILE" /> <appender-ref ref="SYSLOG" /> </logger> <root level="${root.level:-DEBUG}"> <appender-ref ref="STDOUT" /> </root> <configuration>

Y en el includedFile.xml puedo controlar si, y en qué nivel de mensaje pasará a través de los agregadores FILE y SYSLOG , estableciendo las propiedades file.level , syslog.level y por supuesto logging.level .


Tuve un problema similar al cual esta respuesta parece ser el mejor enfoque.

En mi caso, tuve que anular el archivo incluido para desactivar por completo uno de los agregadores.

Usando la variable a para el valor de nivel de registro, se puede cambiar a OFF.

<included> (...) <root level="${root.level.console:-DEBUG}"> <appender-ref ref="CONSOLE" /> </root> <root level="${root.level.file:-DEBUG}"> <appender-ref ref="FILE" /> </root> </included>

Como se indica en http://logback.qos.ch/manual/configuration.html#rootElement

<configuration> <include resource="base.xml" /> (...) <property name="root.level.console" value="OFF" /> </configuration>