From b7ff9d1e16c85bf986a770676827bee390f0d53c Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Santos Souza de Miranda Date: Thu, 13 Nov 2025 17:10:23 -0300 Subject: [PATCH] Improve logging, shutdown behavior, and build configuration: - Enabled `immediateFlush` for log appenders and disabled `shutdownHook` in Log4j2 configuration. - Enhanced shutdown hook with graceful Log4j2 termination and extended delay for log flushing. - Improved database connection closure logging in `DatabaseManager`. - Integrated Maven Shade Plugin to create executable JARs with all dependencies. --- pom.xml | 22 +++++++++++++++++++ .../mediamanager/MediaManagerApplication.java | 13 +++++++++-- .../service/database/DatabaseManager.java | 5 ++++- src/main/resources/log4j2.xml | 7 +++--- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 9a87f4d..3ea8e09 100644 --- a/pom.xml +++ b/pom.xml @@ -96,6 +96,28 @@ maven-surefire-plugin 3.2.5 + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.1 + + + package + + shade + + + + + com.mediamanager.MediaManagerApplication + + + + + + diff --git a/src/main/java/com/mediamanager/MediaManagerApplication.java b/src/main/java/com/mediamanager/MediaManagerApplication.java index 7150608..f4acc3c 100644 --- a/src/main/java/com/mediamanager/MediaManagerApplication.java +++ b/src/main/java/com/mediamanager/MediaManagerApplication.java @@ -32,19 +32,28 @@ public class MediaManagerApplication { // Keep application running Runtime.getRuntime().addShutdownHook(new Thread(() -> { + logger.info("Shutting down MediaManager Core..."); + + if (databaseManager != null) { databaseManager.close(); } - // TODO: Cleanup resources logger.info("MediaManager Core shutdown successfully"); + logger.info("Goodbye!"); + + + // Give Log4j2 time to write all pending messages before shutting down try { - Thread.sleep(500); + Thread.sleep(1000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } + + // Now shutdown Log4j2 + org.apache.logging.log4j.LogManager.shutdown(); })); logger.info("Application is running"); logger.info("Press Ctrl+C to exit"); diff --git a/src/main/java/com/mediamanager/service/database/DatabaseManager.java b/src/main/java/com/mediamanager/service/database/DatabaseManager.java index 0f43fa9..eeabc69 100644 --- a/src/main/java/com/mediamanager/service/database/DatabaseManager.java +++ b/src/main/java/com/mediamanager/service/database/DatabaseManager.java @@ -88,11 +88,14 @@ public class DatabaseManager { public void close() { if (connection != null) { try { + logger.info("Closing database connection..."); connection.close(); logger.info("Database connection closed successfully"); } catch (SQLException e) { - logger.error("Failed to close database connection", e); + logger.error("Error closing database connection: {}", e.getMessage()); } + } else { + logger.debug("No database connection to close"); } } } diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 29d32dc..39be1a8 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -1,12 +1,13 @@ - + - + + filePattern="logs/mediamanager-%d{yyyy-MM-dd}-%i.log" + immediateFlush="true">