From b97bb8432d79fa53880dfc43e0bb45c509037c25 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sat, 1 May 2021 15:34:00 +0300 Subject: [PATCH] =?UTF-8?q?cli:=20=D0=BF=D1=83=D1=82=D1=8C=20=D0=B4=D0=BE?= =?UTF-8?q?=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B3=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.MD | 4 +-- server/src/main/java/mc/server/Main.java | 34 ++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/README.MD b/README.MD index 04e53ca..968e795 100644 --- a/README.MD +++ b/README.MD @@ -15,11 +15,11 @@ ### Gradle ```shell -gradle :server:run --args="--config=config.yml" --project-prop jvmArgs="-Dlogback.configurationFile=logback.xml" +gradle :server:run --args="--config=config.yml --logconfig==logback.xml" ``` ### Jar ```shell -java -Dlogback.configurationFile=logback.xml -jar server.jar --config=config.yml +java -jar server.jar --config=config.yml --logconfig==logback.xml ``` \ No newline at end of file diff --git a/server/src/main/java/mc/server/Main.java b/server/src/main/java/mc/server/Main.java index 6f57b77..c5f506e 100644 --- a/server/src/main/java/mc/server/Main.java +++ b/server/src/main/java/mc/server/Main.java @@ -1,5 +1,8 @@ package mc.server; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.joran.JoranConfigurator; +import ch.qos.logback.core.joran.spi.JoranException; import joptsimple.OptionParser; import joptsimple.OptionSet; import joptsimple.util.PathConverter; @@ -19,6 +22,7 @@ import mc.server.di.ConfigModule; import mc.server.di.DaggerServerComponent; import mc.server.di.ServerComponent; import org.apache.commons.io.IOUtils; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; @@ -35,6 +39,7 @@ import java.util.Objects; @SuppressWarnings("java:S106") public class Main { private static final String CLI_CONFIG = "config"; + private static final String CLI_LOGCONFIG = "logconfig"; private void run(OptionSet optionSet) { log.info("mc-project launch"); @@ -104,7 +109,7 @@ public class Main { return; } else if (optionSet.has("init")) { Path configPath = (Path) optionSet.valueOf(CLI_CONFIG); - Path logbackPath = Paths.get(System.getProperty("logback.configurationFile", "logback.xml")); + Path logbackPath = (Path) optionSet.valueOf(CLI_LOGCONFIG); if (!initializeCheckFiles(configPath, logbackPath)) { return; @@ -123,6 +128,8 @@ public class Main { return; } + reconfigureLogback(optionSet); + if (log.isDebugEnabled()) { optionSet.asMap().forEach((optionSpec, objects) -> { if (optionSpec.isForHelp()) return; @@ -135,12 +142,19 @@ public class Main { private static OptionParser createOptionParser() { OptionParser optionParser = new OptionParser(); + optionParser.acceptsAll(List.of("h", "help"), "Help page").forHelp(); + optionParser.accepts("init", "Initialize environment"); + optionParser.accepts(CLI_CONFIG, "Path to configuration file") .withRequiredArg() .withValuesConvertedBy(new PathConverter()) .defaultsTo(Paths.get("config.yml")); - optionParser.accepts("init", "Initialize environment"); + + optionParser.accepts(CLI_LOGCONFIG, "Path to logger configuratuin file") + .withRequiredArg() + .withValuesConvertedBy(new PathConverter()) + .defaultsTo(Paths.get("logback.xml")); return optionParser; } @@ -167,4 +181,20 @@ public class Main { return true; } + + private static void reconfigureLogback(OptionSet optionSet) throws IOException { + LoggerContext logbackContext = (LoggerContext) LoggerFactory.getILoggerFactory(); + logbackContext.reset(); + JoranConfigurator configurator = new JoranConfigurator(); + + Path logbackPath = (Path) optionSet.valueOf(CLI_LOGCONFIG); + try(InputStream in = Objects.requireNonNull( + Files.newInputStream(logbackPath), "File not found: " + logbackPath.toAbsolutePath())) { + + configurator.setContext(logbackContext); + configurator.doConfigure(in); + } catch (JoranException e) { + throw new IOException(e); + } + } }