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.

Cómo usar un archivo de configuración de log4j2 para tiempo de ejecución en el IDE y otro archivo de configuración de log4j2 para empaquetado/despliegue?

Utilizando Eclipse 06-2021, Maven, log4j2.

Estoy utilizando el framework log4j2 para registrar mensajes en mi aplicación. He creado una configuración en la carpeta de recursos en un archivo llamado log4j2.properties.

Allí he definido algunos registradores (loggers) y sus niveles:


logger.filelogconvert.appenderRef = FileLogConvert
logger.fileloggeneral.appenderRef = FileLogGeneral
rootLogger.appenderRef.console.ref = FileLogGeneral

logger.fileloggeneral.level = warn
rootLogger.level = warn

Sin embargo, necesito reescribir este archivo cuando quiero desplegar la aplicación, ya que necesito cambiar los niveles de “info” a “warn” o cambiar las referencias de los appenders y registradores (loggers).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para evitar actualizar manualmente el archivo log4j2.properties cada vez que despliegue la aplicación, puede utilizar archivos de configuración específicos del perfil externo. Aquí están los pasos para hacerlo en Eclipse 06-2021 usando Maven:

    1. Cree una nueva carpeta llamada “config” en la carpeta src/main/resources de su proyecto.
    2. Dentro de la carpeta “config”, cree un nuevo archivo llamado “log4j2.xml” con el siguiente contenido:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="WARN">
        <properties>
            <property name="file.name">application</property>
            <property name="file.extension">log</property>
        </properties>
        <appenders>
            <console name="Console" target="SYSTEM_OUT">
                <thresholdfilter level="INFO" onmatch="ACCEPT" onmismatch="DENY"></thresholdfilter>
                <patternlayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"></patternlayout>
            </console>
            <rollingfile name="File" filename="${sys:user.home}/logs/${file.name}.${file.extension}" filepattern="${sys:user.home}/logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.${file.extension}">
                <thresholdfilter level="INFO" onmatch="ACCEPT" onmismatch="DENY"></thresholdfilter>
                <patternlayout>
                    <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</pattern>
                </patternlayout>
                <policies>
                    <timebasedtriggeringpolicy interval="1" modulate="true"></timebasedtriggeringpolicy>
                    <sizebasedtriggeringpolicy size="10MB"></sizebasedtriggeringpolicy>
                </policies>
                <defaultrolloverstrategy max="10"></defaultrolloverstrategy>
            </rollingfile>
        </appenders>
        <loggers>
            <logger name="com.example.myapp" level="INFO" additivity="false">
                <appenderref ref="Console"></appenderref>
                <appenderref ref="File"></appenderref>
            </logger>
            <root level="WARN">
                <appenderref ref="Console"></appenderref>
                <appenderref ref="File"></appenderref>
            </root>
        </loggers>
    </configuration>
    

    Este archivo log4j2.xml define dos appenders (Console y File) y dos loggers (com.example.myapp y el logger raíz). Puede personalizar este archivo en base a sus necesidades específicas.

    1. Actualice su archivo pom.xml agregando la siguiente configuración de compilación:
    <build>
        <resources>
            <resource>
                <filtering>true</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <targetpath>${project.build.directory}/classes</targetpath>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-surefire-plugin</artifactid>
                <version>3.0.0-M5</version>
                <configuration>
                    <systempropertyvariables>
                        <log4j.configurationfile>${project.build.outputDirectory}/log4j2.xml</log4j.configurationfile>
                    </systempropertyvariables>
                </configuration>
            </plugin>
            <plugin>
                <groupid>org.apache.maven.plugins</groupid>
                <artifactid>maven-failsafe-plugin</artifactid>
                <version>3.0.0-M5</version>
                <configuration>
                    <systempropertyvariables>
                        <log4j.configurationfile>${project.build.outputDirectory}/log4j2.xml</log4j.configurationfile>
                    </systempropertyvariables>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    Esta configuración le indica a Maven que filtre y copie todos los archivos XML y de propiedades en el directorio de destino (que es target/classes de forma predeterminada). También establece la propiedad del sistema log4j.configurationFile en la ruta del archivo log4j2.xml, para que log4j2 pueda localizarlo y usarlo.

    1. Ejecute su aplicación con Maven ejecutando el siguiente comando:
    mvn clean test
    

    Este comando compilará y probará su aplicación utilizando el archivo log4j2.xml en lugar del archivo log4j2.properties. Puede ajustar los niveles de registro o el nombre/ruta del archivo en el archivo log4j2.xml sin cambiar el código, y Maven utilizará los nuevos valores la próxima vez que ejecute el comando.

    Además, también puede crear diferentes archivos log4j2.xml para diferentes entornos (por ejemplo, desarrollo, puesta en escena, producción) y especificar el perfil activo utilizando opciones de línea de comandos o variables de entorno de Maven. Esto le permite cambiar fácilmente entre diferentes configuraciones de registro sin modificar el código fuente o modificar directamente el archivo.

Comments are closed.