2012-07-30 3 views
1

java.util.logging의 FileHandler 클래스는 쓰기중인 파일에 대한 일종의 잠금 메커니즘을 구현합니다. 그러나 응용 프로그램이 끝난 후 .lck 파일이 파일 시스템에있는 것을 발견했습니다. .lck 파일 또는 전체 잠금 메커니즘과 관련하여 FileHandler 클래스의 비헤이비어를 사용자 정의하는 방법이 있습니까?java.util.logging.FileHandler 및 멀티 스레딩

편집 : FileHandler 개체를 닫으면 .lck 파일이 사라지는 것으로 보입니다. 이 행동이 필요한거야? 나는 여하튼 FileHandler의 close 메소드가 자동으로 호출되어야한다고 예상했다. ...

+0

나는 응용 프로그램이 정상적으로 중지되고 응용 프로그램이 충돌하거나 죽으면 뒤에 남아있을 경우 lck 파일이 사라질 것으로 예상됩니다. – centic

답변

0

닫히지 않은 모든 것을 닫는 것 인 job 인 thread를 활성화하는 System.addShutdownHookFinalizer (Runnable r) 함수를 사용할 수있다. 그래서 당신은 FileHandler를 닫을 것이고 .lck 파일은 사라질 것입니다.

0

FileHandler 객체를 닫으면 .lck 파일이 사라지는 것처럼 보입니다. 이 행동이 필요한거야? 어떻게 든 FileHandler의 close 메소드가 자동으로 호출되어야한다고 생각했습니다.

LogManager는 종료시 Logger에 계속 첨부되어있는 FileHandler를 종료하는 종료 훅을 가지고 있습니다. 문제는 로거가 가비지 수집 대상이 될 수 있다는 것입니다. 이 경우 FileHandler가 닫히지 않습니다. 이 작업은 다음 버그에 덮여있다 : 그들은 쓰레기 수집되지 않도록

  1. JDK-8060132 Handlers configured on abstract nodes in logging.properties are not always properly closed.
  2. JDK-6274920: JDK logger holds strong reference to java.util.logging.Logger instances.

이 로거에 대한 강한 참조를 보관하십시오.