From 60e3051079a6facb398893ae222656334d3f420c Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Fri, 1 Nov 2024 09:47:53 -0700 Subject: Allow redirecting log to console If $RAVENWOOD_LOG_OUT is set, redirect stdin/stdout to this file. Example usage: RAVENWOOD_LOG_OUT=$(tty) atest RavenwoodBivalentTest Flag: EXEMPT host test change only Bug: 292141694 Test: RAVENWOOD_LOG_OUT=$(tty) RAVENWOOD_VERBOSE=1 atest RavenwoodBivalentTest Change-Id: I49e4c6b8a2bd7c39dbb15ade3a2ad6303accb3db --- ravenwood/runtime-jni/ravenwood_runtime.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/ravenwood/runtime-jni/ravenwood_runtime.cpp b/ravenwood/runtime-jni/ravenwood_runtime.cpp index 3ff08483c956..2a3c26ed3ea3 100644 --- a/ravenwood/runtime-jni/ravenwood_runtime.cpp +++ b/ravenwood/runtime-jni/ravenwood_runtime.cpp @@ -173,6 +173,24 @@ static void Linux_setenv(JNIEnv* env, jobject, jstring javaName, jstring javaVal throwIfMinusOne(env, "setenv", setenv(name.c_str(), value.c_str(), overwrite ? 1 : 0)); } +static void maybeRedirectLog() { + auto ravenwoodLogOut = getenv("RAVENWOOD_LOG_OUT"); + if (ravenwoodLogOut == NULL) { + return; + } + ALOGI("RAVENWOOD_LOG_OUT set. Redirecting output to %s", ravenwoodLogOut); + + // Redirect stdin / stdout to /dev/tty. + int ttyFd = open(ravenwoodLogOut, O_WRONLY); + if (ttyFd == -1) { + ALOGW("$RAVENWOOD_LOG_OUT is set to %s, but failed to open: %s ", ravenwoodLogOut, + strerror(errno)); + return; + } + dup2(ttyFd, 1); + dup2(ttyFd, 2); +} + // ---- Registration ---- extern void register_android_system_OsConstants(JNIEnv* env); @@ -192,6 +210,8 @@ static const JNINativeMethod sMethods[] = }; extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) { + maybeRedirectLog(); + ALOGI("%s: JNI_OnLoad", __FILE__); JNIEnv* env = GetJNIEnvOrDie(vm); -- cgit v1.2.3-59-g8ed1b