使用任何文件追加器进行Log4j的每日轮换和每月保留


11

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

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

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

log4j版本为1.2。

Answers:


4

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

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>

它将在午夜旋转,并删除30天之前的日志文件。

fileNamePattern:从fileNamePattern的值推断出过渡期

maxHistory:可选的maxHistory属性控制要保留的最大归档文件数,以异步方式删除较旧的文件。例如,如果您指定每月滚动,并将maxHistory设置为6,则将保留6个月的归档文件,并删除6个月以上的文件。请注意,由于删除了旧的归档日志文件,因此将适当删除为日志文件归档而创建的所有文件夹。

您可以在TimeBasedRollingPolicy上查看更多信息


@PaulEdison只是好奇,这些配置不起作用吗?
javaGroup456 '19

1
此解决方案基于
登录

哇.... @benbenw是正确的!我不明白为什么我把这个问题误解为logback .....谢谢您的提醒。请参考他/她的答案以获取log4j。
tonarimochi '19

3

我们可以!

文件: 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>

有关更多信息,请参见文档:TimeBasedRollingPolicy

JavaDoc:TimeBasedRollingPolicy


1

大多数答案都基于登录。但是问题是关于log4j 1.2(旧...)

提到DailyRollingFileAppender的答案也不起作用。 org.apache.log4j.DailyRollingFileAppender不支持该MaxBackupIndex属性,请参见http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html(用于RollingFileAppender

您可能有兴趣: 在DailyRollingFileAppender -log4j中使用MaxBackupIndex

并给出可能的答案: Log4j Rollingpolicy和MaxbackupIndex

但是您可能应该使用slf4j log4j“仿真”(http://www.slf4j.org/legacy.html#log4j-over-slf4j)并通过logback路由日志(无需任何代码更改),在此日志中易于实现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.