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.

PaulEdison
fuente

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
Basharat Ali
fuente
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

tonarimochi
fuente
@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

Aymen
fuente
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 .

benbenw
fuente