2012-05-08 5 views
3

내 프로젝트에서 특정 결과를 수집하기 위해 log4j FileAppender를 사용하고 있습니다. 응용 프로그램이 다시 시작되면 이전 결과 파일을 유지하고 새 파일을 시작하고 싶습니다. 그게 가능하니?다시 시작할 때 log4j 롤오버

예를 들어

:

  • 시작 응용 프로그램, 결과,
  • 응용 프로그램
  • 다시 시작 응용 프로그램을 종료 results.log results_1.log하는 결과를 작성하는 쓰기
  • ...

DailyRollingFileAppender를 체크 아웃했는데 실제로 필요한 것은 아닙니다. 이는 certa에서 자동으로 롤오버되기 때문입니다. 날짜 설정. 응용 프로그램이 다시 시작될 때 롤오버해야합니다.

답변

1

응용 프로그램에서 로그 파일을 동적으로 설정하는 것은 어떻습니까? 응용 프로그램이 시작될 때 프로그램 방식으로 파일 첨부기를 작성하여 현재 로거에 첨부하여이 작업을 수행 할 수 있습니다.

예를 들어 다음 코드는 현재 시간을 기준으로 새 로그 파일을 만듭니다. 예 : results_1336482894.log, results_1336486780.log

Date now = new Date(); 
    FileAppender myFileAppender = new FileAppender(); 
    myFileAppender.setName("myFileAppender"); 
    myFileAppender.setFile("results_" + now.getTime() + ".log"); 
    myFileAppender.setLayout(new PatternLayout("%d %-5p [%t]: %m%n")); 
    myFileAppender.setThreshold(Level.DEBUG); 
    myFileAppender.activateOptions(); 

    Logger myLogger = Logger.getLogger("name of your logger"); //Or use getRootLogger() instead 
    myLogger.addAppender(myFileAppender); 
+0

코드를 "깨끗하게"유지하고 싶습니다. log4j에 대한 모든 구성을 이전에 XML 파일로 제거했습니다. 그러나, 나는 setFile() 프로그래밍 방식으로 구성을 사용하여 노력하고 그 위대한 작동합니다. – EsTeGe

0

당신은 응용 프로그램이 시작될 때 로그 파일을 롤오버하는 ExternallyRolledFileAppenderRoller 클래스를 사용할 수 있습니다.

import org.apache.log4j.Logger; 
import org.apache.log4j.varia.Roller; 
public class Test { 
    private static final Logger log = Logger.getLogger(Test.class); 
    public static void main(final String[] args) { 
     Roller.main(new String[] {"localhost", "9999"}); 
     log.debug("Started application!"); 
    } 
} 

그리고 예를 들어 log4j.properties 파일 :

log4j.appender.file=org.apache.log4j.varia.ExternallyRolledFileAppender 
log4j.appender.file.File=app.log 
log4j.appender.file.Port=9999 
log4j.appender.file.MaxBackupIndex=5 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5p: %t: %c: %m%n 
log4j.rootLogger=DEBUG, file 

ExternallyRolledFileAppender의 경고에주의를 기울이지 마십시오 개시가 인증되지 않은 것을

는 여기에 예제 클래스입니다. 누구든지 롤오버를 시작할 수 있습니다. 프로덕션 환경에서는 원하지 않는 롤오버를 방지하기 위해 몇 가지 보호 형식을 추가하는 것이 좋습니다.

이 방법이 사용자의 요구에 맞지 않는다면, 비슷한 Appender 구현을 만드는 것이 쉽습니다.

1

나는 내 자신의 펜더 작성하여이 문제를 해결 한 다음 MAXFILESIZE 설정이 작동하지 않았고이 appender는 모든 10MB의, 롤오버 그렇지 않은 것으로부터

import org.apache.log4j.RollingFileAppender; 

/** 
    This appender rolls over at program start. 
    This is for creating a clean boundary between log data of different runs. 
*/ 
public class RunRolledFileAppender 
    extends RollingFileAppender 
{ 
    public RunRolledFileAppender() { } 

    @Override 
    public void activateOptions() { 
    super.activateOptions(); 
    super.rollOver(); 
    } 

    @Override 
    public void rollOver() { } 

} 

참고 전복 추악한 비활성화()를 필요했다, 어떤 나는 필요 없어.

관련 문제