diff --git a/CHANGELOG.md b/CHANGELOG.md index e9bce41..b71d256 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - nothing yet +### Added + +- Alternative log level support via `-v`, `-vv`, `-vvv` + [#23](https://github.com/netsec-ethz/jpan-cli/pull/23) + ## [0.3.0] - 2026-05-04 ### Fixed diff --git a/src/main/java/org/scion/cli/Cli.java b/src/main/java/org/scion/cli/Cli.java index c8ab16d..d5dc3d6 100644 --- a/src/main/java/org/scion/cli/Cli.java +++ b/src/main/java/org/scion/cli/Cli.java @@ -20,8 +20,7 @@ import static org.scion.cli.util.Util.*; import java.io.IOException; -import java.util.Arrays; -import java.util.Locale; +import java.util.*; import org.scion.cli.util.ExitCodeException; public class Cli { @@ -36,9 +35,10 @@ public static void main(String... args) { } public static void run(String... args) throws IOException { - checkArgs(args, 1, Integer.MAX_VALUE); - String mode = args[0].toLowerCase(Locale.ROOT); - String[] newArgs = Arrays.copyOfRange(args, 1, args.length); + List argList = new ArrayList<>(Arrays.asList(args)); + checkArgs(argList, 1, Integer.MAX_VALUE); + String mode = argList.remove(0).toLowerCase(Locale.ROOT); + String[] newArgs = argList.toArray(new String[0]); switch (mode) { case "address": new Address().run(newArgs); @@ -72,12 +72,26 @@ public static void run(String... args) throws IOException { } } - private static void checkArgs(String[] args, int minArgs, int maxArgs) { - if (args.length < minArgs || args.length > maxArgs) { + private static void checkArgs(List args, int minArgs, int maxArgs) { + if (args.size() < minArgs || args.size() > maxArgs) { println("Invalid number of arguments."); printUsage(); throw new ExitCodeException(2, "Invalid number of arguments."); } + // Loglevel must be set before starting tha application. + for (Iterator it = args.iterator(); it.hasNext(); ) { + String arg = it.next(); + if ("-v".equals(arg)) { + System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "WARN"); + it.remove(); + } else if ("-vv".equals(arg)) { + System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "INFO"); + it.remove(); + } else if ("-vvv".equals(arg)) { + System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "DEBUG"); + it.remove(); + } + } } private static void printHelp(String mode) { @@ -122,7 +136,8 @@ private static void printUsage() { println(" version Show the SCION version information"); println(""); println("Flags:"); - println(" -h, --help help for jpan-cli"); + println(" -h, --help Help for jpan-cli"); + println(" -v, -vv, -vvv Verbose output"); println(""); println("Use \"jpan-cli [command] --help\" for more information about a command."); } diff --git a/src/main/java/org/scion/cli/Traceroute.java b/src/main/java/org/scion/cli/Traceroute.java index f4ca85f..5fdd5dc 100644 --- a/src/main/java/org/scion/cli/Traceroute.java +++ b/src/main/java/org/scion/cli/Traceroute.java @@ -208,6 +208,10 @@ private static void printPath(Path path) { String nl = System.lineSeparator(); // sb.append("Actual local address:").append(nl); // sb.append(" ").append(channel.getLocalAddress().getAddress().getHostAddress()).append(nl); + String nextHop = "unknown"; + if (path.getMetadata() != null && path.getMetadata().getLocalInterface() != null) { + nextHop = path.getMetadata().getLocalInterface().getAddress(); + } String sb = "Using path:" + nl @@ -216,7 +220,7 @@ private static void printPath(Path path) { + " MTU: " + path.getMetadata().getMtu() + " NextHop: " - + path.getMetadata().getLocalInterface().getAddress() + + nextHop + nl; println(sb); }