diff --git a/CMakeLists.txt b/CMakeLists.txt index 878a350..f888133 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,6 +38,7 @@ option(ENABLE_AAMP_JSBINDINGS_DYNAMIC "ENABLE_AAMP_JSBINDINGS_DYNAMIC" OFF) option(ENABLE_JSRUNTIME_PLAYER "ENABLE_JSRUNTIME_PLAYER" OFF) option(ENABLE_JSRUNTIME_THUNDER_SECURITYAGENT "ENABLE_JSRUNTIME_THUNDER_SECURITYAGENT" OFF) option(BUILD_JSRUNTIME_DESKTOP "BUILD_JSRUNTIME_DESKTOP" ON) +option(USE_ETHANLOG "USE_ETHANLOG" OFF) option(PKG_CONFIG_SYSROOT_DIR "PKG_CONFIG_SYSROOT_DIR" "${CMAKE_CURRENT_SOURCE_DIR}/externals/extlibs") if(JSRUNTIME_ENGINE_NAME STREQUAL "jsc") @@ -158,6 +159,12 @@ else () set(JSRUNTIME_LIBRARY_LINK_DIRECTORIES ${JSRUNTIME_LIBRARY_LINK_DIRECTORIES} -L${CMAKE_CURRENT_SOURCE_DIR}/../build/) endif (BUILD_JSRUNTIME_DESKTOP) +if (USE_ETHANLOG) + message("Enabling Ethan logs") + add_definitions("-DUSE_ETHANLOG") + set(JSRUNTIME_LINK_ETHANLIB -lethanlog) +endif (USE_ETHANLOG) + if (BUILD_JSRUNTIME_APP) message("Enabling build support for jsruntime app") add_executable(jsruntime_app ${JSRUNTIME_APP_FILES}) @@ -165,14 +172,14 @@ if (BUILD_JSRUNTIME_APP) add_dependencies(jsruntime_app ${JSRUNTIME_LIBRARY_NAME} ${JSRUNTIME_ENGINE_DEPENDENT_LIBRARY_NAME} ) target_include_directories(jsruntime_app PRIVATE ${JSRUNTIME_INCLUDE_DIRECTORIES}) set_target_properties(jsruntime_app PROPERTIES OUTPUT_NAME ${EXE}) - target_link_libraries(jsruntime_app ${JSRUNTIME_LIBRARY_LINK_DIRECTORIES} -l${JSRUNTIME_LIBRARY_NAME} ${JSRUNTIME_LINK_LIBRARIES}) + target_link_libraries(jsruntime_app ${JSRUNTIME_LIBRARY_LINK_DIRECTORIES} -l${JSRUNTIME_LIBRARY_NAME} ${JSRUNTIME_LINK_LIBRARIES} ${JSRUNTIME_LINK_ETHANLIB}) endif (BUILD_JSRUNTIME_APP) if (BUILD_JSRUNTIME_CLIENT) add_executable(jsruntime_client ${JSRUNTIME_CLIENT_FILES}) target_include_directories(jsruntime_client PRIVATE ${JSRUNTIME_INCLUDE_DIRECTORIES}) set_target_properties(jsruntime_client PROPERTIES OUTPUT_NAME "JSRuntimeClient") - target_link_libraries(jsruntime_client ${JSRUNTIME_LIBRARY_LINK_DIRECTORIES} -lpthread) + target_link_libraries(jsruntime_client ${JSRUNTIME_LIBRARY_LINK_DIRECTORIES} ${JSRUNTIME_LINK_ETHANLIB} -lpthread) endif (BUILD_JSRUNTIME_CLIENT) set(UWEBSOCKETS_TARGET "Linux") diff --git a/include/NativeJSLogger.h b/include/NativeJSLogger.h index 69149dd..e8a5c15 100644 --- a/include/NativeJSLogger.h +++ b/include/NativeJSLogger.h @@ -32,9 +32,11 @@ class NativeJSLogger { public: static void setLogLevel(const char* loglevel); + static void isEthanLogEnabled(); static void log(LogLevel level, const char* format, ...); private: static LogLevel sLogLevel; + static bool mEthanLogEnabled; }; #endif // NATIVEJS_LOGGER_H diff --git a/src/NativeJSLogger.cpp b/src/NativeJSLogger.cpp index f1a4b15..212a041 100644 --- a/src/NativeJSLogger.cpp +++ b/src/NativeJSLogger.cpp @@ -24,13 +24,27 @@ #include #include #include -#include + +#ifdef USE_ETHANLOG +#include + +static const int ethanLogLevelMap[] = { + ETHAN_LOG_DEBUG, ETHAN_LOG_INFO, ETHAN_LOG_WARNING, ETHAN_LOG_ERROR, ETHAN_LOG_FATAL +}; +#endif static const char* logLevelNames[] = { "DEBUG", "INFO", "WARN", "ERROR", "FATAL" }; + LogLevel NativeJSLogger::sLogLevel = INFO; +bool NativeJSLogger::mEthanLogEnabled = false; + +void NativeJSLogger::isEthanLogEnabled() +{ + mEthanLogEnabled = (getenv("ETHAN_LOGGING_PIPE") != nullptr); +} void NativeJSLogger::setLogLevel(const char* loglevel) { @@ -50,35 +64,36 @@ void NativeJSLogger::setLogLevel(const char* loglevel) void NativeJSLogger::log(LogLevel level, const char* format, ...) { - if (level < sLogLevel) - return; - - FILE* logFile = fopen("/opt/logs/jsruntime.log", "a"); - if (!logFile) { - perror("Failed to open jsruntime.log"); - return; - } + if (level < sLogLevel) + return; - char timeStr[64]; - time_t now = time(NULL); - struct tm* t = localtime(&now); - strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", t); + va_list args; + va_start(args, format); + int threadId = syscall(__NR_gettid); - int threadId = syscall(__NR_gettid); - const char* levelStr = logLevelNames[level]; - char buffer[512]; +#ifdef USE_ETHANLOG + if (mEthanLogEnabled) + { + int ethanLogLevel = ethanLogLevelMap[level]; + char* newFormat = nullptr; + int len = snprintf(nullptr, 0, "JSRuntime [Thread-%d] %s", threadId, format); + if (len > 0) { + newFormat = (char*)alloca(len + 1); + snprintf(newFormat, len + 1, "JSRuntime [Thread-%d] %s", threadId, format); + } else { + newFormat = (char*)format; + } - va_list args; - va_start(args, format); - vsnprintf(buffer, sizeof(buffer), format, args); - va_end(args); + vethanlog(ethanLogLevel, "JsRuntime", nullptr, -1, newFormat, args); + } +#else + + const char* levelStr = logLevelNames[level]; + char buffer[512]; + vsnprintf(buffer, sizeof(buffer), format, args); + printf("\n[%s] JsRuntime Thread-%d: %s\n", levelStr, threadId, buffer); - if(getenv("NATIVEJS_LOGS_REG")) - printf("\n[%s] JsRuntime Thread-%d: %s\n", levelStr, threadId, buffer); - else - fprintf(logFile, "%s : [%s] JsRuntime Thread-%d: %s\n", timeStr, levelStr, threadId, buffer); - - fclose(logFile); +#endif //USE_ETHANLOG + va_end(args); } - diff --git a/src/NativeJSRenderer.cpp b/src/NativeJSRenderer.cpp index 5e7df7e..fbc852f 100644 --- a/src/NativeJSRenderer.cpp +++ b/src/NativeJSRenderer.cpp @@ -103,6 +103,11 @@ NativeJSRenderer::NativeJSRenderer(std::string waylandDisplay): mEngine(nullptr) } const char* levelFromEnv = getenv("NATIVEJS_LOG_LEVEL"); + // checking for ethan log env + #ifdef USE_ETHANLOG + NativeJSLogger::isEthanLogEnabled(); + NativeJSLogger::log(INFO, "EthanLog is enabled"); + #endif if(levelFromEnv) { NativeJSLogger::setLogLevel(levelFromEnv);