
実現したいこと
java実行中にSystem.exit(1)等で終了した際、終了処理を行うためにRuntime.getRuntime().addShutdownHookを予め定義していたのですが、addShutdownHookの中ではjava.util.logging.Loggerの出力が一切されなくなります。
これは一体どういう理由なのでしょうか?
addShutdownHookは終了処理と同時に平行で進むため、Logger用に確保されていたメモリが解放された といった現象なのでしょうか?
また、可能であれば、addShutdownHook中にLoggerを出力できるようにする方法はあるでしょうか?
下記が現象のサンプルコードです。
Java
1package org.example; 2import java.util.logging.Logger; 3 4public class Main { 5 private static final Logger logger = Logger.getLogger(Main.class.getName()); 6 public static void main(String[] args) { 7 logger.info("test"); 8 Runtime.getRuntime().addShutdownHook(new Thread( 9 () -> { 10 try { 11 while (true) { 12 logger.info("logger wait"); 13 System.out.println("print wait"); 14 Thread.sleep(1000); 15 } 16 } catch (Exception e) { 17 logger.info("logger error"); 18 System.out.println("print error"); 19 System.exit(1); 20 } 21 } 22 )); 23 } 24} 25
上記を実行実行すると、下記のような実行結果となります。
11 02, 2023 12:07:18 午前 org.example.Main main 情報: test 11 02, 2023 12:07:18 午前 org.example.Main lambda$main$0 情報: logger wait print wait print wait print wait print wait print wait print wait


回答1件
あなたの回答
tips
プレビュー