使用任何文件附加程序进行Log4j的每日轮换和每月保留

Pau*_*son 11 java logging log4j retention

是否可以使用任何log4j附加程序写入具有特定轮换时间和保留限制的日志。
目标是:

  • 每天有一个日志文件;在午夜为新日志创建一个新文件
  • 保留日志文件并在一定时间后自动将其删除;因此,删除早于X天(例如30天)的日志文件

似乎可以旋转,但使用log4j不可能限制保留时间

log4j版本为1.2。

小智 6

这个 log4J 属性对我有用

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
Run Code Online (Sandbox Code Playgroud)


小智 4

我的答案是基于logback,而不是log4j(抱歉造成混淆..)


您可以使用 来实现日志轮换TimeBasedRollingPolicy

例如)

<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>
Run Code Online (Sandbox Code Playgroud)

它将在午夜轮换,并删除超过 30 天的日志文件。

fileNamePattern:滚动周期是根据 fileNamePattern 的值推断出来的

maxHistory:可选的 maxHistory 属性控制要保留的归档文件的最大数量,异步删除旧文件。例如,如果您指定每月滚动,并将 maxHistory 设置为 6,则将保留 6 个月的存档文件,并删除超过 6 个月的文件。请注意,当旧的存档日志文件被删除时,为日志文件存档而创建的任何文件夹都将根据需要删除。

您可以查看TimeBasedRollingPolicy的更多信息