기본 콘텐츠로 건너뛰기

라벨이 java.util.logging package인 게시물 표시

[ JAVA ] JVM Shutdown 상황에서도 로그를 출력해 보자.

  현재 진행 중인 프로젝트는 Java Agent 를 이용해서 JVM 상에 구동되는 Application의 성능을 측정하기 위한 Custom Profiler를 구성하는 것이기에 Logging 정보가 상당히 중요하고, JVM Shutdown 되는 시점을 Hooking 하여 Agent 의 서비스들이 제대로 종료하는지를 검증하여야 한다.   그런데 JVM Shutdown Hooking 을 하게 되면 그 시점에 java.util.logging.LogManager 를 사용하고 있다면 Logger 들이 모두 Clear 되어 버리기 때문에 완전히 종료되는 시점까지 Logging 을 처리할 수 없다. *** 지금부터 언급하는 상황들은 java.util.logging.LogManager를 사용하는 경우에 해당하는 것이므로 다른 logging 처리를 하는 경우에는 해당되지 않는다. 다만 처리되는 상황이 궁금한 경우는 참고가 될 수도 있다. 왜? Logger 가 모두 Clear 되는 것일까?   가장 먼저 문제가 되는 LogManager를 역 추적해 보도록 하자. 우선 어플리케이션에서 JVM Shutdown 을 Hooking 하는 방법은 아래와 같다. // JVM Shutdown Hook Thread를 설정한다. Thread shutdownThread = new Thread(new Runnable() { @Override public void run() { try { LOGGER.info("JVM Shutdown called"); shutdown(); LOGGER.info("JVM Shutdown complete"); } catch (Exception e) { LOGGER.log(Level.SEVERE, "JVM Shutdown completed with errors", e);