From 486faf7fad4d1053189ef1d3a8d904d01dea86f3 Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Sat, 21 Aug 2021 03:40:31 +0500 Subject: [PATCH] Fixed: Stdin not being logged for background execution commands --- .../java/com/termux/shared/logger/Logger.java | 7 ++++- .../shared/models/ExecutionCommand.java | 31 ++++++++++++++----- .../termux/shared/shell/StreamGobbler.java | 2 +- .../com/termux/shared/shell/TermuxTask.java | 7 +++-- 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/termux-shared/src/main/java/com/termux/shared/logger/Logger.java b/termux-shared/src/main/java/com/termux/shared/logger/Logger.java index 10e777f8..fe418387 100644 --- a/termux-shared/src/main/java/com/termux/shared/logger/Logger.java +++ b/termux-shared/src/main/java/com/termux/shared/logger/Logger.java @@ -26,6 +26,7 @@ public class Logger { public static final int LOG_LEVEL_VERBOSE = 3; // start logging verbose messages public static final int DEFAULT_LOG_LEVEL = LOG_LEVEL_NORMAL; + public static final int MAX_LOG_LEVEL = LOG_LEVEL_VERBOSE; private static int CURRENT_LOG_LEVEL = DEFAULT_LOG_LEVEL; /** @@ -413,7 +414,7 @@ public class Logger { } public static int setLogLevel(Context context, int logLevel) { - if (logLevel >= LOG_LEVEL_OFF && logLevel <= LOG_LEVEL_VERBOSE) + if (isLogLevelValid(logLevel)) CURRENT_LOG_LEVEL = logLevel; else CURRENT_LOG_LEVEL = DEFAULT_LOG_LEVEL; @@ -431,4 +432,8 @@ public class Logger { return DEFAULT_LOG_TAG + ":" + tag; } + public static boolean isLogLevelValid(Integer logLevel) { + return (logLevel != null && logLevel >= LOG_LEVEL_OFF && logLevel <= MAX_LOG_LEVEL); + } + } diff --git a/termux-shared/src/main/java/com/termux/shared/models/ExecutionCommand.java b/termux-shared/src/main/java/com/termux/shared/models/ExecutionCommand.java index d3611a53..84ac21db 100644 --- a/termux-shared/src/main/java/com/termux/shared/models/ExecutionCommand.java +++ b/termux-shared/src/main/java/com/termux/shared/models/ExecutionCommand.java @@ -240,7 +240,7 @@ public class ExecutionCommand { @Override public String toString() { if (!hasExecuted()) - return getExecutionInputLogString(this, true); + return getExecutionInputLogString(this, true, true); else { return getExecutionOutputLogString(this, true, true); } @@ -251,9 +251,10 @@ public class ExecutionCommand { * * @param executionCommand The {@link ExecutionCommand} to convert. * @param ignoreNull Set to {@code true} if non-critical {@code null} values are to be ignored. + * @param logStdin Set to {@code true} if {@link #stdin} should be logged. * @return Returns the log friendly {@link String}. */ - public static String getExecutionInputLogString(final ExecutionCommand executionCommand, boolean ignoreNull) { + public static String getExecutionInputLogString(final ExecutionCommand executionCommand, boolean ignoreNull, boolean logStdin) { if (executionCommand == null) return "null"; StringBuilder logString = new StringBuilder(); @@ -270,8 +271,13 @@ public class ExecutionCommand { logString.append("\n").append(executionCommand.getInBackgroundLogString()); logString.append("\n").append(executionCommand.getIsFailsafeLogString()); - if (executionCommand.inBackground && (!ignoreNull || executionCommand.backgroundCustomLogLevel != null)) - logString.append("\n").append(executionCommand.getBackgroundCustomLogLevelLogString()); + if (executionCommand.inBackground) { + if (logStdin && (!ignoreNull || !DataUtils.isNullOrEmpty(executionCommand.stdin))) + logString.append("\n").append(executionCommand.getStdinLogString()); + + if (!ignoreNull || executionCommand.backgroundCustomLogLevel != null) + logString.append("\n").append(executionCommand.getBackgroundCustomLogLevelLogString()); + } if (!ignoreNull || executionCommand.sessionAction != null) logString.append("\n").append(executionCommand.getSessionActionLogString()); @@ -321,7 +327,7 @@ public class ExecutionCommand { StringBuilder logString = new StringBuilder(); - logString.append(getExecutionInputLogString(executionCommand, false)); + logString.append(getExecutionInputLogString(executionCommand, false, true)); logString.append(getExecutionOutputLogString(executionCommand, false, true)); logString.append("\n").append(executionCommand.getCommandDescriptionLogString()); @@ -356,8 +362,12 @@ public class ExecutionCommand { markdownString.append("\n").append(MarkdownUtils.getSingleLineMarkdownStringEntry("inBackground", executionCommand.inBackground, "-")); markdownString.append("\n").append(MarkdownUtils.getSingleLineMarkdownStringEntry("isFailsafe", executionCommand.isFailsafe, "-")); - if (executionCommand.inBackground && executionCommand.backgroundCustomLogLevel != null) - markdownString.append("\n").append(MarkdownUtils.getSingleLineMarkdownStringEntry("Background Custom Log Level", executionCommand.backgroundCustomLogLevel, "-")); + if (executionCommand.inBackground) { + if (!DataUtils.isNullOrEmpty(executionCommand.stdin)) + markdownString.append("\n").append(MarkdownUtils.getMultiLineMarkdownStringEntry("Stdin", executionCommand.stdin, "-")); + if (executionCommand.backgroundCustomLogLevel != null) + markdownString.append("\n").append(MarkdownUtils.getSingleLineMarkdownStringEntry("Background Custom Log Level", executionCommand.backgroundCustomLogLevel, "-")); + } markdownString.append("\n").append(MarkdownUtils.getSingleLineMarkdownStringEntry("Session Action", executionCommand.sessionAction, "-")); @@ -431,6 +441,13 @@ public class ExecutionCommand { return "isFailsafe: `" + isFailsafe + "`"; } + public String getStdinLogString() { + if (DataUtils.isNullOrEmpty(stdin)) + return "Stdin: -"; + else + return Logger.getMultiLineLogStringEntry("Stdin", stdin, "-"); + } + public String getBackgroundCustomLogLevelLogString() { return "Background Custom Log Level: `" + backgroundCustomLogLevel + "`"; } diff --git a/termux-shared/src/main/java/com/termux/shared/shell/StreamGobbler.java b/termux-shared/src/main/java/com/termux/shared/shell/StreamGobbler.java index a8e1ca91..e17ecefb 100644 --- a/termux-shared/src/main/java/com/termux/shared/shell/StreamGobbler.java +++ b/termux-shared/src/main/java/com/termux/shared/shell/StreamGobbler.java @@ -194,7 +194,7 @@ public class StreamGobbler extends Thread { int currentLogLevel = Logger.getLogLevel(); int customLogLevel; - if (mLlogLevel != null && mLlogLevel >= Logger.LOG_LEVEL_OFF) { + if (Logger.isLogLevelValid(mLlogLevel)) { customLogLevel = mLlogLevel; Logger.logVerbose(LOG_TAG, "Using custom log level: " + customLogLevel + ", current log level: " + currentLogLevel); } else { diff --git a/termux-shared/src/main/java/com/termux/shared/shell/TermuxTask.java b/termux-shared/src/main/java/com/termux/shared/shell/TermuxTask.java index 4d0658e5..8b75be41 100644 --- a/termux-shared/src/main/java/com/termux/shared/shell/TermuxTask.java +++ b/termux-shared/src/main/java/com/termux/shared/shell/TermuxTask.java @@ -8,6 +8,7 @@ import android.system.OsConstants; import androidx.annotation.NonNull; import com.termux.shared.R; +import com.termux.shared.data.DataUtils; import com.termux.shared.models.ExecutionCommand; import com.termux.shared.models.ResultData; import com.termux.shared.models.errors.Errno; @@ -80,7 +81,9 @@ public final class TermuxTask { return null; } - Logger.logDebug(LOG_TAG, executionCommand.toString()); + // No need to log stdin if logging is disabled, like for app internal scripts + int customLogLevel = Logger.isLogLevelValid(executionCommand.backgroundCustomLogLevel) ? executionCommand.backgroundCustomLogLevel: Logger.LOG_LEVEL_VERBOSE; + Logger.logDebug(LOG_TAG, ExecutionCommand.getExecutionInputLogString(executionCommand, true, customLogLevel >= Logger.getLogLevel())); String taskName = ShellUtils.getExecutableBasename(executionCommand.executable); @@ -146,7 +149,7 @@ public final class TermuxTask { STDOUT.start(); STDERR.start(); - if (mExecutionCommand.stdin != null && !mExecutionCommand.stdin.isEmpty()) { + if (!DataUtils.isNullOrEmpty(mExecutionCommand.stdin)) { try { STDIN.write((mExecutionCommand.stdin + "\n").getBytes(StandardCharsets.UTF_8)); STDIN.flush();