2017-09-19 1 views
0

어제부터 몇 가지 사항을 알고 있습니다.JAVA LOGGIN의 app.log.X 파일 증가를 방지하고 제어하는 ​​방법

Java에서 webapp (WAR)를 로깅하려고합니다.

로그를 만들고 FileHandler를 추가하고 로그 메시지를 보냅니다. 그러나 우리 모두가 알고있는 것처럼 파일 핸들러는 fush() 및 close()를 호출 할 때까지 새 파일에 대한 잠금을 유지합니다. 따라서 전쟁을 재배포 할 때 (또는 내가 개발 중에 실행하면 지속적으로 app)은 배포 당 하나의 파일을 만듭니다 (못생긴).

그래서이 동작을 피하려고했습니다. (퍼포먼스의 방식으로이 방법으로 수행되는지, 매주 파일을 열거 나 닫을 때마다 비용이 많이 들지는 모르겠지만) 잘 모르겠다. 그러나 나는 atach를 원한다. 로거가 메세지를 로그 할 때마다 핸들러와 플러시/클로즈. (그래서 나는 하나의 파일을 가지고있다).

하지만이 작업을 수행 할 방법을 찾지 못했습니다. 나는 java.util.Logger 클래스를 확장하려고 노력하며 매우 힘들다. (어떤 사람들에게는 반대했다.)

어떤 사람이이 상황을 어떻게 해결할 수 있는지 실마리가 있습니까?

미리 감사드립니다.

public class LogUtil { 

public static String name = "app%g.log"; 

public static Logger obtenerLogger(String eid, String path, Level levelToLog) { 
    Logger logger = Logger.getLogger(eid); 
    if (levelToLog != null) { 
     logger.setLevel(levelToLog); 
    } 

    //I create the folder if not exist 
    File dirFile = new File(path); 
    if (!dirFile.exists()) { 
     dirFile.mkdirs(); 
    } 

    //I remove the handlers and close after each logg call (doing this i can use the same file lof after log) 
    for (Handler handler : logger.getHandlers()) { 
     logger.removeHandler(handler); 
     handler.close(); 
     handler.flush(); 
    } 

    //I Create the FileHandler 
    FileHandler f; 
    try { 
     f = new FileHandler(
       path + name, //pattern 
       10485760, //limit 
       3, // count 
       true); //append 
     //f.setFormatter(new SimpleFormatter()); 
     f.setFormatter(new MyFormatter()); 
     f.setLevel(levelToLog); 
    } catch (Exception ex) { 
     return null; 
    } 

    logger.addHandler(new ConsoleHandler()); 
    logger.addHandler(f); 

    return logger; 
} 

PD1 :하지만 전쟁의 재배포에, 내가 로거 클래스를 호출, 그것은 새로운 로거를 만들 수 있지만 마지막 하나 열다 유지한다. 그리고 그 대답은 여기

+0

로거 설정/구성 게시하시기 바랍니다. – pleft

답변

0

로그를 만들고 FileHandler를 추가하고 로그 메시지를 보냅니다. 그러나 우리 모두가 알고있는 것처럼 파일 핸들러는 fush() 및 close()를 호출 할 때까지 새 파일에 대한 잠금을 유지합니다. 따라서 전쟁을 재배포 할 때 (또는 내가 개발 중에 실행하면 지속적으로 app)은 배포 당 하나의 파일을 만듭니다 (못생긴).

로거 트리 및 처리기를 프로그래밍 방식으로 설정하는 경우 사용자 지정 ServletContextListener을 구현하고 웹 응용 프로그램에 등록해야합니다. 다음은 example입니다.

도 확인하십시오. you are holding a strong reference to your loggers

관련 문제