2012-10-11 5 views
4

이 프로젝트는 저에게 맡겨 졌으므로 그것에 대해 많이 알지 못합니다. 이 로그 (java.util.logging.Logger)을 사용하는 방법이며 두 개의 로그 파일을 생성합니다로그 파일 닫기

첫 번째 파일 : fileName.log

두 번째 파일 : fileName.log.lck

을 리눅스에서 lsof을 실행하면이 두 파일이 열린 것으로 간주됩니다. 이 두 파일을 닫으려면 어떻게해야합니까?

이 파일을 닫으려는 이유는이 방법이 하루에 여러 번 실행되고 열린 파일의 수가 제한 (약 1000 개)에 도달하여 시스템이 작동을 멈춘다는 것입니다. 프로세스를 다시 시작할 때 (로그를 수행하는 "Job Controller") 열린 로그 파일 수가 0이되어 다시 작동합니다.

이 내가 finally 블록에있는 파일을 닫습니다하려고 노력 무엇

private static Logger log = Logger.getLogger(MyClass.class.getPackage().getName()); 
try{ 
    log.logp(Level.SEVERE, "com.MyClass", "run", "It failed"); 
} 

로그인 무엇을 해본 적이있다하지만 최초의 솔루션

finally{ 
    Handler[] handler = log.getHandlers(); 
    for(Handler h: handler){ 
     h.close(); 
    } 
} 
+2

왜 이러한 파일을 닫으시겠습니까? – jdevelop

+1

이러한 파일을 닫으면 아마도 문제가 발생할 수 있습니다. –

+0

열린 파일 수가 특정 한도에 도달 한 후 몇 주가 지나면 어떤 일이 발생합니까? 따라서 프로세스 (작업 제어기)를 다시 시작하면 열려있는 파일 수가 0으로 돌아가고 모든 것이 작동합니다. 수동으로 매번 프로세스를 자주 다시 시작하는 대신 코드에서 수행해야합니다. – Susie

답변

1

를 작동하지 않았다

코드를 수정하지 않으려면 다음을 사용하십시오. How to send java.util.logging to log4j? java.util.logging.Logger to Logback using SLF4J?

나는 log4j 또는 logback을 사용합니다. 둘 다 Rolling File Appender (이전 파일이 제거됨) 또는 Date/Time File appender가 있습니다.

최적의 사용이 파일을 굴러 로깅을위한 두 번째 솔루션

.

String filePattern = " fileName%.log"; 
int limit = 1000 * 1000; // 1 Mb 
int numLogFiles = 3; 
FileHandler fh = new FileHandler(filePattern, limit, numLogFiles); 

// Add to logger 
Logger logger = Logger.getLogger(MyClass.class.getPackage().getName()); 
logger.addHandler(fh); 

전적으로 파일 처리기를 추가 할 수 있는지 여부는 잘 모르겠습니다.

LogManager.getLogManager().reset(); 

이 모든 로그 설정을 (... 파일 경로, 파일 이름 패턴, 포맷 로그)이 취소됩니다하지만 로거가 잠금 파일을 닫고 로거를 풀어 사용을 중지합니다

5

는 단순히 사용 ~