모든 파일 어 펜더로 Log4j 일일 로테이션 및 월간 보존


11

모든 log4j 어 펜더로 특정 회전 시간 및 보유 제한으로 로그를 작성할 수 있습니까?
목표는 다음과 같습니다.

  • 매일 로그 파일을 가지고; 자정에 새 로그를위한 새 파일 만들기
  • 일정 시간이 지나면 로그 파일을 유지하고 자동으로 삭제합니다. X 일보다 오래된 로그 파일을 삭제하십시오 (예 : 30 일)

log4j에서는 회전이 가능하지만 보존 시간의 한계는 불가능합니다.

log4j 버전은 1.2입니다.

답변:


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

1
이 솔루션은하지의 log4j logback을 기반으로
benbenw

와우 .... @benbenw가 맞습니다 !! 왜이 질문을 로그 백으로 오해했는지 이해가되지 않습니다 ..... 상기시켜 주셔서 감사합니다. log4j에 대한 답변을 참조하십시오.
tonarimochi

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에서 MaxBackupIndex 사용 -log4j

가능한 답변 : Log4j Rollingpolicy 및 MaxbackupIndex

그러나 아마도 slf4j log4j "emulation"( http://www.slf4j.org/legacy.html#log4j-over-slf4j )을 사용하고 구현하기가 훨씬 쉬운 코드 변경없이 로그 백을 통해 로그를 라우팅해야합니다. .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.