문제

응용 프로그램이 실행되는 한 로그가 롤오버되기를 원하지만 응용 프로그램이 다시 시작될 때 로그가 새로 시작되기를 원합니다.

업데이트 :기반 에릭슨 피드백, 내 애플 렌더는 다음과 같습니다.

   <appender name="myRFA" class="org.apache.log4j.RollingFileAppender">
      <param name="File" value="my-server.log"/>
      <param name="Append" value="false" />
      <param name="MaxFileSize" value="10MB"/>
      <param name="MaxBackupIndex" value="10"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern"
            value="%d{ISO8601} %p - %t - %c - %m%n"/>
      </layout>
   </appender>

나는 단순히 다음 줄을 추가했습니다.

<param name="Append" value="false" />

이제 시작시 기본 로그 파일을 자르지 만 롤링 된 파일을 단독으로 남겨 둡니다.

도움이 되었습니까?

해결책

당신이 설정하면 append 매개 변수 false, 응용 프로그램이 다시 시작될 때 기본 로그 파일이 "신선한 시작"됩니다. "롤링 된"로그 파일도 삭제되기를 원하십니까?

다른 팁

나는 내 것을 찾기 위해 몇 가지 사용자 정의 코드를 작성했습니다 RollingFileAppender (Log4J에서 액세스하기가 불필요하게 어렵습니다!) 그런 다음 롤오버를 유발합니다. 단일 용도로 아래 코드를 조정했습니다. 응용 프로그램 시작시 이와 유사한 코드를 사용하여 로그를 강제로 롤링하여 (비어 있지 않은 경우) 항상 신선한 로그에서 시작하지만 가장 오래된 로그를 삭제하지는 않습니다.

이 코드는 주어진 로거를 가져 와서 부록이 첨부 된 로거를 찾을 때까지 로거 계층 구조를 반복합니다. 결코 그렇게하지 않으면 포기합니다. 그렇다면 해당 로거에 부착 된 모든 부록과 롤링 필립처 인 각 부록에 대해 루그를 강요합니다.

이 같은 ~해야 한다 Log4J에서는 훨씬 쉽게 할 수 있지만 더 간단한 방법을 찾지 못했습니다.

public void rollLogFile(Logger logger) {
  while (logger != null && !logger.getAllAppenders().hasMoreElements()) {
    logger = (Logger)logger.getParent();
  }

  if (logger == null) {
    return;
  }

  for (Enumeration e2 = logger.getAllAppenders(); e2.hasMoreElements();) {
    final Appender appender = (Appender)e2.nextElement();
    if (appender instanceof RollingFileAppender) {
      final RollingFileAppender rfa = (RollingFileAppender)appender;
      final File logFile = new File(rfa.getFile());
      if (logFile.length() > 0) {
        rfa.rollOver();
      }
    }
  }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top