From e60c0de82fc9d3f455f8f16a40c16a3583f638e7 Mon Sep 17 00:00:00 2001 From: Exil Productions Date: Tue, 30 Dec 2025 18:37:06 +0100 Subject: [PATCH] Add Logger Callback to Server --- .gitignore | 1 + CMakeLists.txt | 4 ++-- build.sh | 5 ++--- include/rtmp_server.hpp | 6 ++++++ server/cpp/main.cpp | 13 +++++++++++++ src/rtmp_server.cpp | 7 ++----- 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 9a24e44..60a89ac 100644 --- a/.gitignore +++ b/.gitignore @@ -111,6 +111,7 @@ CMakeUserPresets.json .nfs* ### VisualStudioCode ### +.vscode .vscode/* !.vscode/settings.json !.vscode/tasks.json diff --git a/CMakeLists.txt b/CMakeLists.txt index 40f2c5d..7a997d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,8 +12,8 @@ add_library(rtmp SHARED ) target_include_directories(rtmp PUBLIC - <BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> - <INSTALL_INTERFACE:include> + BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include; + INSTALL_INTERFACE:include; ) set_target_properties(rtmp PROPERTIES diff --git a/build.sh b/build.sh index 6272d22..f61fff3 100755 --- a/build.sh +++ b/build.sh @@ -1,4 +1,3 @@ rm -rf build -mkdir build && cd build -cmake -DCMAKE_BUILD_TYPE=Release .. -make -j$(nproc) \ No newline at end of file +cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release +cmake build --build \ No newline at end of file diff --git a/include/rtmp_server.hpp b/include/rtmp_server.hpp index 6b8db95..0f7301b 100644 --- a/include/rtmp_server.hpp +++ b/include/rtmp_server.hpp @@ -309,6 +309,8 @@ using OnDisconnectCallback = std::function)>; using AuthCallback = std::function; +using OnLoggerCallback = + std::function; // Logger class Logger { @@ -325,11 +327,15 @@ public: void warn(const std::string &msg); void info(const std::string &msg); void debug(const std::string &msg); + void setOnLog(const OnLoggerCallback cb) { on_log = cb; } private: Logger() : current_level(LogLevel::INFO) {} LogLevel current_level; std::mutex log_mutex; + + // Logger Callback + OnLoggerCallback on_log; void log(LogLevel level, const std::string &msg); }; diff --git a/server/cpp/main.cpp b/server/cpp/main.cpp index dbda0ca..0a02d49 100644 --- a/server/cpp/main.cpp +++ b/server/cpp/main.cpp @@ -21,6 +21,18 @@ void onPublish(std::shared_ptr session, const std::string& app, con std::cout << "Publish from " << session->getStreamInfo().client_ip << ": " << app << "/" << key << std::endl; } +bool onLog(const std::string& message, const rtmp::LogLevel& level) { + std::string levelStr; + switch (level) { + case LogLevel::ERROR: levelStr = "ERROR"; break; + case LogLevel::WARN: levelStr = "WARN"; break; + case LogLevel::INFO: levelStr = "INFO"; break; + case LogLevel::DEBUG: levelStr = "DEBUG"; break; + } + std::cout << "[" << levelStr << "] " << message << std::endl; + return true; +} + static struct termios g_orig_termios; static void restore_terminal() { @@ -66,6 +78,7 @@ int main() { // Set callbacks server.setOnConnect(onConnect); server.setOnPublish(onPublish); + Logger::getInstance().setOnLog(onLog); // Enable GOP cache server.enableGOPCache(true); diff --git a/src/rtmp_server.cpp b/src/rtmp_server.cpp index 378683b..72e201e 100644 --- a/src/rtmp_server.cpp +++ b/src/rtmp_server.cpp @@ -65,11 +65,8 @@ void Logger::log(LogLevel level, const std::string &msg) { if (level > current_level) return; std::lock_guard lock(log_mutex); - auto now = std::chrono::system_clock::now(); - auto time = std::chrono::system_clock::to_time_t(now); - const char *level_str[] = {"ERROR", "WARN", "INFO", "DEBUG"}; - std::cout << "[" << std::put_time(std::localtime(&time), "%Y-%m-%d %H:%M:%S") - << "] [" << level_str[(int)level] << "] " << msg << std::endl; + const LogLevel level_enum[] = {LogLevel::ERROR, LogLevel::WARN, LogLevel::INFO, LogLevel::DEBUG}; + on_log(msg, level); } void Logger::error(const std::string &msg) { log(LogLevel::ERROR, msg); }