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.

Log4j2.xml – archivo RollingFile no funciona correctamente.

Java 1.8

log4j-slf4j-impl

Maven 3.5

Quiero generar un nuevo archivo de registro todos los días.

Para esto, uso RollingFile

Aquí está mi log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test" status="WARN">
    <Properties>
        <Property name="baseDir">logs</Property>
        <Property name="patterLayout">%d{[dd.MM.yyyy HH:mm:ss.SSS]} %l %p:%n %m%n</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${patterLayout}"/>
        </Console>


        <RollingFile name="RollingFile" fileName="${baseDir}/trace.log"
                     filePattern="${baseDir}/$${date:yyyy-MM}/trace-%d{yyyy-MM-dd}.log.gz">
            <PatternLayout pattern="${patterLayout}"/>
            <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
            <DefaultRolloverStrategy>
                <Delete basePath="${baseDir}" maxDepth="2">
                    <IfFileName glob="*/trace-*.log.gz"/>
                    <IfLastModified age="60d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>

    <Loggers>

        <Root level="trace">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
        <Logger name="org.apache.poi" level="error">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>
        <Logger name="org.apache.xmlbeans" level="error">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>
    </Loggers>
</Configuration>

Utilizo RollingFile de la documentación oficial:

Doc

pom.xml

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>

Aquí está el código Java:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class App {
    private static final Logger logger = LoggerFactory.getLogger(App.class);


    public static void main(String[] args) {
        logger.trace("JDK: {}, directorio del proyecto {} ", System.getProperty("java.version"), System.getProperty("user.dir"));

    }
}

Este es el resultado de trace.log:

[28.11.2021 17:28:33.972] com.myproject.xls2metro2.util.XlsxUtil.xlsx2metro2(XlsxUtil.java:17) DEBUG:
 Converting /xls2metro2/link/abs/import/test.txt to METRO2 file...
[28.11.2021 17:28:34.063] com.myproject.xls2metro2.util.XlsxUtil.xlsx2metro2(XlsxUtil.java:17) DEBUG:
 Converting /xls2metro2/link/abs/import/not_exist_file.txt to METRO2 file...



[30.11.2021 19:09:25.560] com.myproject.xls2metro2.util.XlsxUtil.xlsx2metro2(XlsxUtil.java:17) DEBUG:
 Converting /xls2metro2/link/abs/import/test.txt to METRO2 file...
[30.11.2021 19:09:25.626] com.myproject.xls2metro2.util.XlsxUtil.xlsx2metro2(XlsxUtil.java:17) DEBUG:
 Converting /xls2metro2/link/abs/import/not_exist_file.txt to METRO2 file...

Como puede ver, los registros de diferentes días se generan en UN archivo de registro.

Pero necesito un nuevo registro para cada día.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para generar un nuevo archivo de registro diario utilizando RollingFile appender, debe definir un filePattern que incluirá la fecha en el nombre del archivo. Esto se puede lograr mediante el uso de la sintaxis $${date:format} en el atributo filePattern.

    En la configuración log4j2.xml proporcionada, el atributo filePattern de RollingFile appender define el patrón de nombre de archivo como:

    ${baseDir}/$${date:yyyy-MM}/trace-%d{yyyy-MM-dd}.log.gz

    Esto crea un directorio con el año y mes en el nombre, y el nombre del archivo de registro con la fecha en el nombre. Entonces, por ejemplo, el 30 de noviembre de 2021, el archivo de registro se llamará trace-2021-11-30.log.gz y se encontrará en el directorio logs/2021-11/.

    Para generar un nuevo archivo de registro todos los días, es necesario utilizar un formato de fecha más específico que incluirá el día también. Puede cambiar el atributo filePattern a:

    ${baseDir}/$${date:yyyy-MM-dd}/trace-%d{yyyy-MM-dd}.log.gz

    Esto creará un directorio con el año, mes y día en el nombre, y el nombre del archivo de registro con el mismo formato. Por lo que habrá un nuevo archivo de registro para cada día.

    Asegúrese de que el directorio exista antes de ejecutar la aplicación, de lo contrario no se crearán archivos de registro.

    Una vez que haya actualizado el atributo filePattern, puede ejecutar la aplicación como antes y generará nuevos archivos de registro para cada día.

Comments are closed.