diff --git a/digdag-cli/src/main/java/io/digdag/cli/Command.java b/digdag-cli/src/main/java/io/digdag/cli/Command.java index 6f444aae1b..f2d9824104 100644 --- a/digdag-cli/src/main/java/io/digdag/cli/Command.java +++ b/digdag-cli/src/main/java/io/digdag/cli/Command.java @@ -50,6 +50,9 @@ public abstract class Command @Parameter(names = {"-l", "--log-level"}) protected String logLevel = "info"; + @Parameter(names = {"--logback-config"}) + protected String logbackConfigPath = null; + @DynamicParameter(names = "-X") protected Map systemProperties = new HashMap<>(); diff --git a/digdag-cli/src/main/java/io/digdag/cli/Main.java b/digdag-cli/src/main/java/io/digdag/cli/Main.java index aa34ecdf64..5c0bcdfe06 100644 --- a/digdag-cli/src/main/java/io/digdag/cli/Main.java +++ b/digdag-cli/src/main/java/io/digdag/cli/Main.java @@ -37,8 +37,11 @@ import io.digdag.core.Environment; import org.slf4j.LoggerFactory; +import java.io.File; import java.io.InputStream; import java.io.PrintStream; +import java.net.MalformedURLException; +import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; @@ -258,7 +261,7 @@ private boolean processCommonOptions(MainOptions mainOpts, Command command) command.configPath = mainOpts.configPath; } - configureLogging(command.logLevel, command.logPath); + configureLogging(command.logLevel, command.logPath, command.logbackConfigPath); for (Map.Entry pair : command.systemProperties.entrySet()) { System.setProperty(pair.getKey(), pair.getValue()); @@ -267,7 +270,7 @@ private boolean processCommonOptions(MainOptions mainOpts, Command command) return verbose; } - private static void configureLogging(String level, String logPath) + private static void configureLogging(String level, String logPath, String logbackConfig) { LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); JoranConfigurator configurator = new JoranConfigurator(); @@ -277,7 +280,25 @@ private static void configureLogging(String level, String logPath) // logback uses system property to embed variables in XML file Level lv = Level.toLevel(level.toUpperCase(), Level.DEBUG); System.setProperty("digdag.log.level", lv.toString()); + if (!logPath.equals("-")) { + System.setProperty("digdag.log.path", logPath); + } + + try { + if (logbackConfig == null) { + configurator.doConfigure(getLogbackConfigResource(logPath)); + } + else { + configurator.doConfigure(getLogbackConfigureFile(logbackConfig)); + } + } catch (JoranException | MalformedURLException ex) { + System.err.println(ex); + throw new RuntimeException(ex); + } + } + private static URL getLogbackConfigResource(String logPath) + { String name; if (logPath.equals("-")) { if (System.console() != null) { @@ -286,14 +307,15 @@ private static void configureLogging(String level, String logPath) name = "/digdag/cli/logback-console.xml"; } } else { - System.setProperty("digdag.log.path", logPath); name = "/digdag/cli/logback-file.xml"; } - try { - configurator.doConfigure(Main.class.getResource(name)); - } catch (JoranException ex) { - throw new RuntimeException(ex); - } + return Main.class.getResource(name); + } + + private static File getLogbackConfigureFile(String logbackConfigPath) + throws MalformedURLException + { + return new File(logbackConfigPath); } // called also by Run @@ -361,6 +383,7 @@ public static void showCommonOptions(Map env, PrintStream err) err.println(" -L, --log PATH output log messages to a file (default: -)"); err.println(" -l, --log-level LEVEL log level (error, warn, info, debug or trace)"); err.println(" -X KEY=VALUE add a performance system config"); + err.println(" --logback-config PATH path to logback configuration file (for developers only)"); err.println(" -c, --config PATH.properties Configuration file (default: " + defaultConfigPath(env) + ")"); err.println(" --version show client version"); err.println(""); diff --git a/digdag-cli/src/main/resources/digdag/cli/logback-file.xml b/digdag-cli/src/main/resources/digdag/cli/logback-file.xml index b8225e5df1..3f375dd087 100644 --- a/digdag-cli/src/main/resources/digdag/cli/logback-file.xml +++ b/digdag-cli/src/main/resources/digdag/cli/logback-file.xml @@ -16,6 +16,7 @@ +