【发布时间】:2020-03-14 21:34:11
【问题描述】:
注意大多数其他调用 Logger 调用如何工作,所有 System.out.println() 工作,但请有人向我解释为什么 stop() 和 destroy() 中的 Logger.info() 调用从不与其余调用一起打印日志,因为这些功能显然正在运行!?使用 java12,即使 destroy() 也没有显示。这是一个错误,我使用它是不是很奇怪,还是什么?
package test;
import java.util.logging.Logger;
public class Test {
private static Logger LOGGER = Logger.getLogger(Test.class.getCanonicalName());
public static void main(String[] args) {
System.out.println("main()");
LOGGER.info("main()");
new Test();
}
private Test() {
LOGGER.info("Test()");
System.out.println("Test()");
Runtime.getRuntime().addShutdownHook(new ShutdownThread());
}
public void shutdown() throws Exception {
LOGGER.info("shutdown()");
System.out.println("shutdown()");
stop();
destroy();
}
public void stop() throws Exception {
LOGGER.info("stop()");
System.out.println("stop()");
}
public void destroy() {
LOGGER.info("destroy()");
System.out.println("destroy()");
}
class ShutdownThread extends Thread {
ShutdownThread() {
super("app-shutdown-hook");
}
@Override
public void run() {
try {
shutdown();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Bye! ????♂️????????");
}
}
}
同时使用 java 10 和 java 11 (OpenJDK) 的输出:
main()
Mar 14, 2020 1:53:59 PM test.Test main
INFO: main()
Mar 14, 2020 1:53:59 PM test.Test <init>
INFO: Test()
Test()
Mar 14, 2020 1:53:59 PM test.Test shutdown
INFO: shutdown()
shutdown()
stop()
destroy()
Bye! ????♂️????????
使用 java 12 (OpenJDK) 输出:
main()
Mar 14, 2020 2:17:13 PM test.Test main
INFO: main()
Mar 14, 2020 2:17:13 PM test.Test <init>
INFO: Test()
Test()
shutdown()
stop()
destroy()
Bye! ????♂️????????
【问题讨论】:
-
也许this ?