diff --git a/jadx-cli/src/main/java/jadx/cli/JadxCLI.java b/jadx-cli/src/main/java/jadx/cli/JadxCLI.java index 114b3863a..499cfa181 100644 --- a/jadx-cli/src/main/java/jadx/cli/JadxCLI.java +++ b/jadx-cli/src/main/java/jadx/cli/JadxCLI.java @@ -39,7 +39,8 @@ public class JadxCLI { } private static int processAndSave(JadxCLIArgs cliArgs) { - setLogLevelsForLoadingStage(cliArgs); + LogHelper.initLogLevel(cliArgs); + LogHelper.setLogLevelsForLoadingStage(); JadxArgs jadxArgs = cliArgs.toJadxArgs(); jadxArgs.setCodeCache(new NoOpCodeCache()); jadxArgs.setCodeWriterProvider(SimpleCodeWriter::new); @@ -48,7 +49,7 @@ public class JadxCLI { if (checkForErrors(jadx)) { return 1; } - LogHelper.setLogLevelFromArgs(cliArgs); + LogHelper.setLogLevelsForDecompileStage(); if (!SingleClassMode.process(jadx, cliArgs)) { save(jadx); } @@ -63,19 +64,6 @@ public class JadxCLI { return 0; } - private static void setLogLevelsForLoadingStage(JadxCLIArgs cliArgs) { - switch (cliArgs.getLogLevel()) { - case QUIET: - LogHelper.setLogLevelFromArgs(cliArgs); - break; - - case PROGRESS: - // show load errors - LogHelper.applyLogLevel(LogLevelEnum.ERROR); - break; - } - } - private static boolean checkForErrors(JadxDecompiler jadx) { if (jadx.getRoot().getClasses().isEmpty()) { LOG.error("Load failed! No classes for decompile!"); @@ -97,6 +85,8 @@ public class JadxCLI { int progress = (int) (done * 100.0 / total); System.out.printf("INFO - progress: %d of %d (%d%%)\r", done, total, progress); }); + // dumb line clear :) + System.out.print(" \r"); } } } diff --git a/jadx-cli/src/main/java/jadx/cli/LogHelper.java b/jadx-cli/src/main/java/jadx/cli/LogHelper.java index d4976620a..6ab9b149d 100644 --- a/jadx-cli/src/main/java/jadx/cli/LogHelper.java +++ b/jadx-cli/src/main/java/jadx/cli/LogHelper.java @@ -1,5 +1,6 @@ package jadx.cli; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.slf4j.LoggerFactory; @@ -32,34 +33,61 @@ public class LogHelper { } } + @Nullable("For disable log level control") private static LogLevelEnum logLevelValue; - public static void setLogLevelFromArgs(JadxCLIArgs args) { - if (isCustomLogConfig()) { - return; - } - LogLevelEnum logLevel = args.logLevel; - if (args.quiet) { - logLevel = LogLevelEnum.QUIET; - } else if (args.verbose) { - logLevel = LogLevelEnum.DEBUG; - } - - applyLogLevel(logLevel); + public static void initLogLevel(JadxCLIArgs args) { + logLevelValue = getLogLevelFromArgs(args); } - public static void applyLogLevel(LogLevelEnum logLevel) { - logLevelValue = logLevel; + private static LogLevelEnum getLogLevelFromArgs(JadxCLIArgs args) { + if (isCustomLogConfig()) { + return null; + } + if (args.quiet) { + return LogLevelEnum.QUIET; + } + if (args.verbose) { + return LogLevelEnum.DEBUG; + } + return args.logLevel; + } + public static void setLogLevelsForLoadingStage() { + if (logLevelValue == null) { + return; + } + if (logLevelValue == LogLevelEnum.PROGRESS) { + // show load errors + LogHelper.applyLogLevel(LogLevelEnum.ERROR); + fixForShowProgress(); + return; + } + applyLogLevel(logLevelValue); + } + + public static void setLogLevelsForDecompileStage() { + if (logLevelValue == null) { + return; + } + applyLogLevel(logLevelValue); + if (logLevelValue == LogLevelEnum.PROGRESS) { + fixForShowProgress(); + } + } + + /** + * Show progress: change to 'INFO' for control classes + */ + private static void fixForShowProgress() { + setLevelForClass(JadxCLI.class, Level.INFO); + setLevelForClass(JadxDecompiler.class, Level.INFO); + setLevelForClass(SingleClassMode.class, Level.INFO); + } + + private static void applyLogLevel(@NotNull LogLevelEnum logLevel) { Logger rootLogger = (Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME); rootLogger.setLevel(logLevel.getLevel()); - - if (logLevel == LogLevelEnum.PROGRESS) { - // show progress for all levels except quiet - setLevelForClass(JadxCLI.class, Level.INFO); - setLevelForClass(JadxDecompiler.class, Level.INFO); - setLevelForClass(SingleClassMode.class, Level.INFO); - } } @Nullable