Skip to content

Commit 373e74a

Browse files
committed
Add support for dynmically setting log level
1 parent e96536d commit 373e74a

File tree

6 files changed

+129
-74
lines changed

6 files changed

+129
-74
lines changed

src/main/java/com/godiddy/cli/GodiddyCLIApplication.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.godiddy.cli;
22

3+
import com.godiddy.cli.config.LogLevel;
4+
import org.apache.logging.log4j.Level;
35
import org.apache.logging.log4j.LogManager;
46
import org.apache.logging.log4j.Logger;
7+
import org.apache.logging.log4j.core.config.Configurator;
58
import org.fusesource.jansi.AnsiConsole;
69
import picocli.CommandLine;
710

@@ -13,11 +16,35 @@ public class GodiddyCLIApplication {
1316

1417
public static void main(String... args) {
1518
log.info("Starting application: " + Arrays.asList(args));
19+
configureLogLevel();
1620
AnsiConsole.systemInstall();
1721
int exitCode = new CommandLine(new GodiddyRootCommand()).execute(args);
1822
System.out.println();
1923
log.info("Exit code: " + exitCode);
2024
AnsiConsole.systemUninstall();
2125
System.exit(exitCode);
2226
}
27+
28+
private static void configureLogLevel() {
29+
LogLevel.Value logLevel = LogLevel.getLog();
30+
switch (logLevel) {
31+
case warn -> {
32+
Configurator.setLevel("com.godiddy.cli", Level.WARN);
33+
Configurator.setLevel("com.danubetech", Level.WARN);
34+
}
35+
case standard -> {
36+
Configurator.setLevel("com.godiddy.cli", Level.INFO);
37+
Configurator.setLevel("com.danubetech", Level.WARN);
38+
}
39+
case info -> {
40+
Configurator.setLevel("com.godiddy.cli", Level.INFO);
41+
Configurator.setLevel("com.danubetech", Level.INFO);
42+
}
43+
case debug -> {
44+
Configurator.setLevel("com.godiddy.cli", Level.DEBUG);
45+
Configurator.setLevel("com.danubetech", Level.DEBUG);
46+
}
47+
default -> throw new RuntimeException("Invalid log level: " + logLevel);
48+
}
49+
}
2350
}

src/main/java/com/godiddy/cli/Main.java

Lines changed: 0 additions & 74 deletions
This file was deleted.

src/main/java/com/godiddy/cli/clistorage/cliconfig/CLIConfig.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.godiddy.cli.config.Formatting;
55
import com.godiddy.cli.config.Headers;
66
import com.godiddy.cli.config.Kms;
7+
import com.godiddy.cli.config.LogLevel;
78

89
public class CLIConfig {
910

@@ -55,6 +56,18 @@ public static void setKms(Kms.Value kms) {
5556
}
5657
}
5758

59+
public static LogLevel.Value getLogLevel() {
60+
return CLIStorage.get("logLevel") == null ? null : LogLevel.Value.valueOf(CLIStorage.get("logLevel"));
61+
}
62+
63+
public static void setLogLevel(LogLevel.Value logLevel) {
64+
if (logLevel == null) {
65+
CLIStorage.remove("logLevel");
66+
} else {
67+
CLIStorage.put("logLevel", logLevel.name());
68+
}
69+
}
70+
5871
public static String getWalletServiceBase() {
5972
return CLIStorage.get("walletServiceBase");
6073
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package com.godiddy.cli.commands.config;
2+
3+
import com.godiddy.cli.clistorage.cliconfig.CLIConfig;
4+
import com.godiddy.cli.config.LogLevel;
5+
import org.apache.logging.log4j.LogManager;
6+
import org.apache.logging.log4j.Logger;
7+
import picocli.CommandLine;
8+
9+
import java.util.concurrent.Callable;
10+
11+
@CommandLine.Command(
12+
name = "loglevel",
13+
description = "Get or set the log level. Default value: " + LogLevel.DEFAULT_LOGLEVEL + ".",
14+
mixinStandardHelpOptions = true
15+
)
16+
public class ConfigLogLevelCommand extends ConfigAbstractCommand implements Callable<Integer> {
17+
18+
private static final Logger log = LogManager.getLogger(ConfigLogLevelCommand.class);
19+
20+
@CommandLine.Parameters(
21+
index = "0",
22+
description = "The log level. Valid values: ${COMPLETION-CANDIDATES}. Default value: " + LogLevel.DEFAULT_LOGLEVEL + ".",
23+
arity = "0..1"
24+
)
25+
LogLevel.Value logLevel;
26+
27+
@Override
28+
public Integer call() throws Exception {
29+
log.trace("Parameter 'logLevel': " + this.logLevel);
30+
if (Boolean.TRUE.equals(this.delete)) {
31+
CLIConfig.setLogLevel(null);
32+
System.out.println("Log level setting successfully deleted.");
33+
} else {
34+
if (this.logLevel == null) {
35+
LogLevel.Value logLevel = CLIConfig.getLogLevel();
36+
if (logLevel == null) {
37+
System.out.println("No log level set.");
38+
} else {
39+
System.out.println("Log level: " + logLevel);
40+
}
41+
} else {
42+
LogLevel.Value logLevel = this.logLevel;
43+
LogLevel.Value predefinedLogLevel = LogLevel.PREDEFINED_LOGLEVEL.get(logLevel.name());
44+
if (predefinedLogLevel != null) {
45+
System.out.println("Using predefined log level value '" + predefinedLogLevel + "' for parameter value '" + logLevel + "'.");
46+
logLevel = predefinedLogLevel;
47+
}
48+
CLIConfig.setLogLevel(logLevel);
49+
System.out.println("Log level successfully set: " + logLevel);
50+
}
51+
}
52+
return 0;
53+
}
54+
}

src/main/java/com/godiddy/cli/commands/config/ConfigRootCommand.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
ConfigFormattingCommand.class,
1616
ConfigHeadersCommand.class,
1717
ConfigKmsCommand.class,
18+
ConfigLogLevelCommand.class,
1819
ConfigWalletServiceBaseCommand.class,
1920
ConfigVaultEndpointCommand.class,
2021
ConfigVaultTokenCommand.class
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.godiddy.cli.config;
2+
3+
import com.godiddy.cli.clistorage.cliconfig.CLIConfig;
4+
import org.apache.logging.log4j.LogManager;
5+
import org.apache.logging.log4j.Logger;
6+
7+
import java.util.Map;
8+
import java.util.Objects;
9+
10+
public class LogLevel {
11+
12+
private static final Logger log = LogManager.getLogger(LogLevel.class);
13+
14+
public enum Value {
15+
warn,
16+
standard,
17+
info,
18+
debug,
19+
def
20+
};
21+
22+
public static final String DEFAULT_LOGLEVEL = "standard";
23+
public static final Map<String, Value> PREDEFINED_LOGLEVEL = Map.of(
24+
"def", Value.valueOf(DEFAULT_LOGLEVEL)
25+
);
26+
27+
public static Value getLog() {
28+
Value logLevel = Objects.requireNonNullElse(CLIConfig.getLogLevel(), Value.valueOf(DEFAULT_LOGLEVEL));
29+
if (Value.valueOf(DEFAULT_LOGLEVEL).equals(logLevel)) {
30+
log.info("Using default log level: " + DEFAULT_LOGLEVEL);
31+
}
32+
return logLevel;
33+
}
34+
}

0 commit comments

Comments
 (0)