Log4j rotazione giornaliera e conservazione mensile con qualsiasi appender di file


11

È possibile con qualsiasi appendice log4j scrivere i log con tempo di rotazione e limite di conservazione specifici.
L'obiettivo sarebbe:

  • avere un file di registro per ogni giorno; creare un nuovo file a mezzanotte per i nuovi registri
  • conservare i file di registro ed eliminarli automaticamente dopo un certo periodo di tempo; quindi elimina i file di registro più vecchi di X giorni (ad es. 30 giorni)

Sembra che la rotazione sia possibile, ma il limite del tempo di conservazione non è possibile con log4j

La versione di log4j è 1.2.

Risposte:


4

questa proprietà log4J funziona per me

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

La mia risposta si basa su logback, non log4j(scusate per la confusione ..)


È possibile ottenere la rotazione del registro utilizzando TimeBasedRollingPolicy.

per esempio)

<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>

Ruoterà a mezzanotte ed eliminerà i file di registro più vecchi di 30 giorni.

fileNamePattern: il periodo di rollover viene dedotto dal valore di fileNamePattern

maxHistory: la proprietà maxHistory opzionale controlla il numero massimo di file di archivio da conservare, eliminando in modo asincrono i file più vecchi. Ad esempio, se si specifica il rollover mensile e si imposta maxHistory su 6, i file degli archivi per un valore di 6 mesi verranno conservati con file più vecchi di 6 mesi eliminati. Si noti che quando vengono rimossi i vecchi file di registro archiviati, tutte le cartelle create ai fini dell'archiviazione dei file di registro verranno rimosse in modo appropriato.

Puoi controllare ulteriori informazioni su TimeBasedRollingPolicy


@PaulEdison Solo curioso, queste configurazioni non funzionano?
javaGroup456,

1
Questa soluzione si basa sul logback non su log4j
benbenw il

Wow .... @benbenw è corretto !! Non capisco perché avevo frainteso questa domanda come logback ..... Grazie per avermelo ricordato. Si prega di fare riferimento alla sua risposta per log4j.
Tonarimochi,

3

sì possiamo!

file: 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>

per maggiori informazioni consultare la documentazione: TimeBasedRollingPolicy

JavaDoc: TimeBasedRollingPolicy


1

La maggior parte delle risposte si basa sul logback. Ma la domanda riguarda log4j 1.2 (vecchio ...)

la risposta che menziona DailyRollingFileAppender non funzionerà neanche. org.apache.log4j.DailyRollingFileAppendernon supporta la MaxBackupIndexproprietà vedi http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (questo è per RollingFileAppender)

potresti essere interessato a: Utilizzare MaxBackupIndex in DailyRollingFileAppender -log4j

e per una possibile risposta: Log4j Rollingpolicy e MaxbackupIndex

Ma probabilmente dovresti usare l '"emulazione" di log4j slf4j ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) e instradare il tuo log attraverso il logback (senza alcuna modifica del codice) dove è molto più facile implementare .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.