From fd4d4280007ac6b1fbd87bf11d8652d0f87c3029 Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Wed, 20 Sep 2017 17:41:24 +0200 Subject: [PATCH] [New] It is now possible to override a logging Just add a logback.xml file with the appropriate configuration in the config folder and it will be loaded automatically. --- .../li/strolch/agent/api/LoggingLoader.java | 48 +++++++++++++++++++ .../li/strolch/agent/api/StrolchAgent.java | 3 ++ .../agent/api/StrolchBootstrapper.java | 5 +- 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 li.strolch.agent/src/main/java/li/strolch/agent/api/LoggingLoader.java diff --git a/li.strolch.agent/src/main/java/li/strolch/agent/api/LoggingLoader.java b/li.strolch.agent/src/main/java/li/strolch/agent/api/LoggingLoader.java new file mode 100644 index 000000000..e44e92dc7 --- /dev/null +++ b/li.strolch.agent/src/main/java/li/strolch/agent/api/LoggingLoader.java @@ -0,0 +1,48 @@ +package li.strolch.agent.api; + +import java.io.File; +import java.net.MalformedURLException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.util.ContextInitializer; +import ch.qos.logback.core.joran.spi.JoranException; + +public class LoggingLoader { + + private static final Logger logger = LoggerFactory.getLogger(LoggingLoader.class); + + private static final String LOGBACK_XML = "logback.xml"; + + public static void reloadLogging(File configPathF) { + + File logConfigFile = new File(configPathF, LOGBACK_XML); + if (!logConfigFile.exists()) { + logger.info("Not changing loback configuration as " + logConfigFile.getAbsolutePath() + " does not exist."); + } else { + if (!(LoggerFactory.getILoggerFactory() instanceof LoggerContext)) { + logger.error(logConfigFile.getAbsolutePath() + + " exists, but LoggerFactory is not instance of ch.qos.logback.classic.LoggerContext. Ignoring."); + } else { + logger.info(logConfigFile.getAbsolutePath() + " file exists. Reloading logging configuration from " + + logConfigFile); + LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); + try { + loggerContext.reset(); + new ContextInitializer(loggerContext).configureByResource(logConfigFile.toURI().toURL()); + logger.info("Reloaded logger configuration from " + logConfigFile.getAbsolutePath()); + } catch (MalformedURLException | JoranException e) { + try { + new ContextInitializer(loggerContext).autoConfig(); + } catch (JoranException e1) { + logger.error("Failed to reload original config after failure to load new config from " + + logConfigFile.getAbsolutePath(), e); + } + logger.error("Failed to reload logback configuration from file " + logConfigFile, e); + } + } + } + } +} diff --git a/li.strolch.agent/src/main/java/li/strolch/agent/api/StrolchAgent.java b/li.strolch.agent/src/main/java/li/strolch/agent/api/StrolchAgent.java index 305e00c41..3767c0e9d 100644 --- a/li.strolch.agent/src/main/java/li/strolch/agent/api/StrolchAgent.java +++ b/li.strolch.agent/src/main/java/li/strolch/agent/api/StrolchAgent.java @@ -34,6 +34,7 @@ import li.strolch.runtime.configuration.ConfigurationParser; import li.strolch.runtime.configuration.RuntimeConfiguration; import li.strolch.runtime.configuration.StrolchConfiguration; import li.strolch.utils.helper.StringHelper; +import li.strolch.utils.helper.SystemHelper; /** * @author Robert von Burg @@ -41,6 +42,7 @@ import li.strolch.utils.helper.StringHelper; public class StrolchAgent { public static final String AGENT_VERSION_PROPERTIES = "/agentVersion.properties"; //$NON-NLS-1$ + private static final Logger logger = LoggerFactory.getLogger(StrolchAgent.class); private ComponentContainerImpl container; @@ -176,6 +178,7 @@ public class StrolchAgent { logger.info(" - Config: " + configPathF.getAbsolutePath()); logger.info(" - Data: " + dataPathF.getAbsolutePath()); logger.info(" - Temp: " + tempPathF.getAbsolutePath()); + logger.info(" - user.dir: " + SystemHelper.getUserDir()); this.strolchConfiguration = ConfigurationParser.parseConfiguration(environment, configPathF, dataPathF, tempPathF); diff --git a/li.strolch.agent/src/main/java/li/strolch/agent/api/StrolchBootstrapper.java b/li.strolch.agent/src/main/java/li/strolch/agent/api/StrolchBootstrapper.java index 5db6a2b2a..643ba53ab 100644 --- a/li.strolch.agent/src/main/java/li/strolch/agent/api/StrolchBootstrapper.java +++ b/li.strolch.agent/src/main/java/li/strolch/agent/api/StrolchBootstrapper.java @@ -310,6 +310,8 @@ public class StrolchBootstrapper extends DefaultHandler { throw new StrolchConfigurationException(msg); } + LoggingLoader.reloadLogging(this.configPathF); + String env; if (StringHelper.isEmpty(this.environmentOverride)) { env = this.environment; @@ -364,7 +366,8 @@ public class StrolchBootstrapper extends DefaultHandler { } String root = StringHelper.isEmpty(this.rootS) - ? new File(System.getProperty(SYS_PROP_USER_DIR)).getAbsolutePath() : this.rootS; + ? new File(System.getProperty(SYS_PROP_USER_DIR)).getAbsolutePath() + : this.rootS; String config = StringHelper.isEmpty(this.configS) ? PATH_CONFIG : this.configS; String data = StringHelper.isEmpty(this.dataS) ? PATH_DATA : this.dataS; String temp = StringHelper.isEmpty(this.tempS) ? PATH_TEMP : this.tempS;