Rotation quotidienne de Log4j et rétention mensuelle avec n'importe quel ajout de fichier

11

Est-il possible avec n'importe quel appendeur log4j d'écrire les journaux avec un temps de rotation et une limite de rétention spécifiques.
Le but serait:

  • d'avoir un fichier journal pour chaque jour; créer un nouveau fichier à minuit pour les nouveaux journaux
  • conserver les fichiers journaux et les supprimer automatiquement après un certain temps; donc supprimez les fichiers journaux de plus de X jours (par exemple 30 jours)

Il semble que la rotation soit possible mais la limite du temps de rétention n'est pas possible avec log4j

La version log4j est 1.2.

PaulEdison
la source

Réponses:

4

ces propriétés log4J fonctionnent pour moi

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
la source
4

Ma réponse est basée sur logback, non log4j(désolé pour la confusion ..)


Vous pouvez effectuer cette rotation de journal à l'aide de TimeBasedRollingPolicy.

par exemple)

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

Il tournera à minuit et supprimera les fichiers journaux de plus de 30 jours.

fileNamePattern: la période de substitution est déduite de la valeur de fileNamePattern

maxHistory: la propriété facultative maxHistory contrôle le nombre maximal de fichiers d'archive à conserver, en supprimant de manière asynchrone les fichiers plus anciens. Par exemple, si vous spécifiez un roulement mensuel et définissez maxHistory sur 6, 6 mois de fichiers d'archives seront conservés et les fichiers de plus de 6 mois seront supprimés. Notez que les anciens fichiers journaux archivés sont supprimés, tous les dossiers créés à des fins d'archivage des fichiers journaux seront supprimés, le cas échéant.

Vous pouvez vérifier plus d'informations sur TimeBasedRollingPolicy

tonarimochi
la source
@PaulEdison Juste curieux, ces configurations ne fonctionnent-elles pas?
javaGroup456
1
Cette solution est basée sur logback et non log4j
benbenw
Wow .... @benbenw est correct !! Je ne comprends pas pourquoi j'avais mal compris cette question en tant que logback ..... Merci de me le rappeler. Veuillez renvoyer sa réponse pour log4j.
tonarimochi
3

Oui nous pouvons!

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

pour plus d'informations, voir la documentation: TimeBasedRollingPolicy

JavaDoc: TimeBasedRollingPolicy

Aymen
la source
1

La plupart des réponses sont basées sur la déconnexion. Mais la question concerne log4j 1.2 (ancienne ...)

la réponse mentionnant DailyRollingFileAppender ne fonctionnera pas non plus. org.apache.log4j.DailyRollingFileAppenderne prend pas en charge la MaxBackupIndexpropriété, voir http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html (c'est pour RollingFileAppender)

vous pouvez être intéressé par: Utiliser MaxBackupIndex dans DailyRollingFileAppender -log4j

et pour une réponse possible: Log4j Rollingpolicy et MaxbackupIndex

Mais vous devriez probablement utiliser l '"émulation" slf4j log4j ( http://www.slf4j.org/legacy.html#log4j-over-slf4j ) et acheminer votre journal via logback (sans aucun changement de code) où il est beaucoup plus facile à implémenter .

benbenw
la source