Repository navigation
Description
Current behavior
AbstractLogConsumeClient.initClient() registers new Thread(this::close) as a JVM shutdown hook. close() first calls Runtime.removeShutdownHook(...), outside its exception handler. Once JVM shutdown has begun, removing a hook throws IllegalStateException: Shutdown in progress; execution never reaches close0().
Location
- Hook registration and close implementation, particularly line 87 before the cleanup at line 92.
Impact and priority
P2 / Medium. The fallback JVM-shutdown cleanup path is broken for logging clients using this base class. Backend cleanup and any flushing implemented in close0() are skipped. Other framework cleanup may run first in a particular deployment, so the report does not claim every shutdown loses logs.
Reproduction and evidence
Compile the current base class with a minimal subclass whose initClient0() returns true, and whose close0() prints a marker. Call initClient(new GenericGlobalConfig()), then System.exit(0) in a child JVM.
Observed output on Java 17:
INITIALIZED
EXITING
Exception in thread "Thread-0" java.lang.IllegalStateException: Shutdown in progress
at java.base/java.lang.ApplicationShutdownHooks.remove(ApplicationShutdownHooks.java:82)
at java.base/java.lang.Runtime.removeShutdownHook(Runtime.java:245)
at org.apache.shenyu.plugin.logging.common.client.AbstractLogConsumeClient.close(AbstractLogConsumeClient.java:87)
The close0() marker is never printed. This is an executable reproduction of the current base-class lifecycle, not an assertion about every external logging backend.
Expected behavior / suggested fix
Shutdown-hook removal must not prevent resource cleanup. Handle the JVM-shutdown case separately or tolerate IllegalStateException around hook removal, and make cleanup idempotent across explicit close and the hook.
Related existing work
Searched all 3,074 existing issue titles and targeted live searches. #6886 and #6768 concern extra/untracked hooks; #6763 concerns buffered records in the collector. This report is the independent base-client exception that prevents its own hook from reaching cleanup.
Environment
Apache ShenYu 2.7.2-SNAPSHOT, master@66d7d954ca37d651a5ad916f988a8081157a7ab4; Java 17. Unit-test and CI issue categories excluded.
Activity
fix(logging): shutdown hook cleanup reaches close0 when hook removal …