java - logger - spring-boot-starter-log4j




Spring Boot, Logback y Logging.config propiedad (4)

Estoy implementando el registro en un proyecto de arranque de primavera con la biblioteca logback. Quiero cargar diferentes archivos de configuración de registro de acuerdo con mis perfiles de primavera (propiedad 'spring.pofiles.active'). Tengo 3 archivos: logback-dev.xml, logback-inte.xml y logback-prod.xml. Estoy usando Spring Boot versión 1.2.2.RELEASE.

Como puede leer en la documentación de arranque de primavera ( here ). Dice:

Los diversos sistemas de registro pueden activarse mediante la inclusión de las bibliotecas apropiadas en el classpath, y personalizarse aún más proporcionando un archivo de configuración adecuado en la raíz del classpath, o en una ubicación especificada por la propiedad Spring Environment logging.config . (Sin embargo, tenga en cuenta que, dado que el registro se inicializa antes de crear ApplicationContext, no es posible controlar el registro desde @PropertySources en los archivos Spring @Configuration. Las propiedades del sistema y los archivos de configuración externos de Spring Boot convencionales funcionan bien).

Así que intenté establecer la propiedad 'logging.config' en mi archivo application.properties:

logging.config=classpath:/logback-${spring.profiles.active}.xml

Pero cuando inicio mi aplicación, mi logback- {profile} .xml no se carga ...

Creo que el registro es un problema común que todos los proyectos que utilizan el arranque de primavera han encontrado. ¿Estoy en el camino correcto con el enfoque anterior? Tengo otras soluciones que funcionan, pero las encuentro no tan elegantes (análisis condicional con Janino en el archivo logback.xml o la propiedad de línea de comandos).


El procesamiento condicional con logback será una solución sin muchos archivos de logback. Aquí hay un enlace y una configuración de inicio de sesión de muestra con perfiles de resorte.

<configuration>

    <property name="LOG_LEVEL" value="INFO"/>

        <if condition='"product".equals("${spring.profiles.active}")'>
           <then>
                <property name="LOG_LEVEL" value="INFO"/>
           </then>
           <else>
                <property name="LOG_LEVEL" value="ERROR"/>
           </else>
        </if>

         .
         .
         appender, logger tags etc.
         .
         .

         <root level="${LOG_LEVEL}">
             <appender-ref ref="STDOUT"/>
         </root>

</configuration>

Además, es posible que deba agregar esto a su pom.xml

<dependency>
    <groupId>org.codehaus.janino</groupId>
    <artifactId>janino</artifactId>
    <version>3.0.6</version>
</dependency>

En lugar de agregar xmls de inicio de sesión por separado para cada perfil o tener la condición IF, sugeriría lo siguiente (si tiene menos diferencia en los xmls ') para un procesamiento condicional fácil:

<springProfile name="dev">
<logger name="org.sample" level="DEBUG" />
</springProfile>
<springProfile name="prod">
<logger name="org.sample" level="TRACE" />
</springProfile>

Otro enfoque que podría manejar múltiples perfiles es crear un archivo de propiedades separado para cada entorno.

application-prod.properties

logging.config=classpath:logback-prod.xml

application-dev.properties

logging.config=classpath:logback-dev.xml

application-local.properties

logging.config=classpath:logback-local.xml

Ten cuidado

Si no tiene cuidado, podría terminar iniciando sesión en algún lugar inesperado

-Dspring.profiles.active=local,dev //will use logback-dev.xml
-Dspring.profiles.active=dev,local //will use logback-local.xml

Puede especificar diferentes logback.xml para diferentes perfiles, solo 3 pasos:

1, especifique el perfil activo en application.properties o application.yml :

spring.profiles.active: test

2, Logback de configuración para incluir diferentes configuraciones por perfil:

<!DOCTYPE configuration>
<configuration scan="true" scanPeriod="30 seconds">
    <springProperty scope="context" name="profile" source="spring.profiles.active"/>
    <include resource="logback.${profile}.xml"/>
</configuration>

3, Crear archivo de configuración logback.test.xml :

<?xml version="1.0" encoding="UTF-8"?>
<included>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <root level="INFO"/>
</included>

Es muy simple, no necesitas hacer nada más.





logback