Log4j rotación diaria y retención mensual con cualquier archivo adjunto


11

¿Es posible con cualquiera de los anexos log4j escribir los registros con un tiempo de rotación específico y un límite de retención?
El objetivo sería:

  • tener un archivo de registro para cada día; crear un nuevo archivo a medianoche para los nuevos registros
  • mantener los archivos de registro y eliminarlos automáticamente después de un cierto período de tiempo; así que elimine los archivos de registro anteriores a X días (por ejemplo, 30 días)

Parece que la rotación es posible pero el límite del tiempo de retención no es posible con log4j

La versión de log4j es 1.2.

Respuestas:


4

estas propiedades log4J me funcionan

log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=/opt/cronjob/logs/cronlogs.log
log4j.appender.file.MaxFileSize=1028MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

4

Mi respuesta se basa en logback, no log4j(perdón por la confusión ...)


Puede lograr esa rotación de registros utilizando TimeBasedRollingPolicy.

por ejemplo)

<appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>./logs/system.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>./logs/system.log.%d{yyyy-MM-dd}</fileNamePattern>
    <!-- keep last 30 days of logs -->
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <charset>UTF-8</charset>
      <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n</Pattern>
  </encoder>
</appender>

Girará a medianoche y eliminará los archivos de registro anteriores a 30 días.

fileNamePattern: el período de renovación se infiere del valor de fileNamePattern

maxHistory: la propiedad opcional maxHistory controla el número máximo de archivos de almacenamiento que se deben mantener, eliminando asincrónicamente los archivos más antiguos. Por ejemplo, si especifica una reinversión mensual y establece maxHistory en 6, los archivos de 6 meses se mantendrán con archivos de más de 6 meses eliminados. Tenga en cuenta que a medida que se eliminen los archivos de registro archivados antiguos, las carpetas que se crearon para archivar archivos de registro se eliminarán según corresponda.

Puede consultar más información en TimeBasedRollingPolicy


@PaulEdison Por curiosidad, ¿no están funcionando estas configuraciones?
javaGroup456

1
Esta solución se basa en logback, no log4j
benbenw

Wow ... ¡@benbenw es correcto! No entiendo por qué había entendido mal esta pregunta como logback ... Gracias por recordármelo. Consulte su respuesta para log4j.
tonarimochi

3

¡si podemos!

archivo: project->src->main->resources->logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>folderName/logFile.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>folderName/archive/logFile.%d{dd-MM-yyyy}.log</fileNamePattern>
      <!-- keep last 30 days of logs -->
      <maxHistory>30</maxHistory>
    </rollingPolicy>

    <!-- filter by level (optional) -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>DEBUG</level>
    </filter>

    <encoder>
      <pattern>%date %-5level [%thread] %file:%L [%M] - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- you can filter by type of level (optional) -->
  <root level="DEBUG">
    <appender-ref ref="FILE"/>
  </root>
</configuration>

Para más información mire la documentación: TimeBasedRollingPolicy

JavaDoc : TimeBasedRollingPolicy


1

La mayoría de las respuestas se basan en el inicio de sesión. Pero la pregunta es sobre log4j 1.2 (antiguo ...)

la respuesta que menciona DailyRollingFileAppender tampoco funcionará. org.apache.log4j.DailyRollingFileAppenderno es compatible con la MaxBackupIndexpropiedad, consulte http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (esto es para RollingFileAppender)

te puede interesar: Usar MaxBackupIndex en DailyRollingFileAppender -log4j

y para una posible respuesta: Log4j Rollingpolicy y MaxbackupIndex

Pero probablemente debería usar la "emulación" slf4j log4j ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) y enrutar su registro a través de logback (sin ningún cambio de código) donde es mucho más fácil de implementar .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.