2011-03-25 4 views
4

Log4J Extras에서 TimeBasedRollingPolicy를 설정 중이며 롤오버 할시기를 알려주는 내용이 명확하지 않습니다. The API은 명확하지 않으므로 추측을하고 있습니다. 주파수를 결정하는 FileNamePattern의 마지막 요소 인 것 같습니다. log4j TimeBasedRollingPolicy가 롤오버되는 시점을 결정하는 것은 무엇입니까?

log4j Wiki에서이 예제를 보자

<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender"> 
    <!-- The active file to log to --> 
    <param name="file" value="/applogs/myportal/portal.log" /> 
    <param name="append" value="true" /> 
    <param name="encoding" value="UTF-8" /> 

    <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> 
    <!-- The file to roll to, this is a fairly intelligent parameter, if the file 
     ends in .gz, it gzips it, based on the date stamp it rolls at that time, 
     default is yyyy-MM-dd, (rolls at midnight) 
    --> 
     <param name="FileNamePattern" value="/applogs/myportal/portal.%d.log.gz" /> 
    </rollingPolicy> 

    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%5p %d{ISO8601} [%t][%x] %c - %m%n" /> 
    </layout> 
</appender> 

내가 패턴이 DD로 끝나는 때문에 정책은 그 변경 될 때 롤 있다고 가정 할 수 있습니까? API의 예제와 동일하게 "yyyy-MM"패턴은 MM이 변경 될 때 파일이 롤백되어야 함을 의미합니다.

감사합니다.

답변

3

글쎄, 나는 한 번 확인해야 할 것,하지만 난 형식 문자열 변경 사항으로 현재 날짜를 서식에 의해 생성 된 문자열은 파일이 출시 될 때마다 말할 것입니다. 즉, "yyyy-MM-dd"를 사용하여 날짜 형식을 지정하면 결과가 매일 바뀝니다. 이것은 "dd"에서만 발생하지만 매월 같은 파일 이름을 가지므로 파일이 겹쳐 쓰이거나 추가되거나 롤링이 실패합니다. 파일이 이미 존재하기 때문에 어떤 파일이 실제로 있는지 appender는 gzip을 제외하고 로그가 추가 될 것입니다.)

편집 :

예 : mylog.%d{dd}.log, 오늘 (2011-03-27)에 대한 결과 로그 파일이있는 경우 이름 mylog.25.log가 (때문에 새로운 날짜 (포맷에) 기록) 및에 메시지를 추가 할 것 그 파일. 내일, 현재 사용 된 파일의 이름은 mylog.26.log입니다. 4 월 25 일에는 다시 mylog.25.log 파일 이름을 얻었으므로 그날의 모든 로그는 이미 3 월 25 일의 로그가 들어있는 파일에 추가됩니다.

+0

당신은 절대적으로 올바른입니다. 왜 내가 전에이 일을하지 않았는지 모르겠지만 [소스 코드] (https://svn.apache.org/repos/asf/logging/log4j/companions/extras/trunk/src/main/)를 확인했습니다. java/org/apache/log4j/rolling/TimeBasedRollingPolicy.java)에서 TimeBasedRollingPolicy를 선택하고 롤오버의 논리에서 "파일 이름이 변경되지 않았거나 롤오버가없는 경우"라는 주석이 있습니다. 감사! – Paul

0

이 작업이 있습니다. 아래는 log4j 코드입니다. pom.xml에 log4j-extras 의존성을 추가하고 아래 코드를 사용하기 만하면됩니다. 아래 코드는 매분마다 롤링되고 .zip 파일을 만듭니다.

메이븐 종속성

<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy"> <param name="FileNamePattern" value="/opt/app/srdotcom/logs/portal.%d{yyyy-MM-dd-HH-mm}.log.zip" /> </rollingPolicy> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{YYYY-MM-dd HH:mm:ss:SSS z}| %c{2}| %m%n" /> </layout> 

:

<dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>apache-log4j-extras</artifactId> 
     <version>1.2.17</version> 
    </dependency> 
관련 문제