Add Logger Callback to Server

This commit is contained in:
Exil Productions
2025-12-30 18:37:06 +01:00
parent 6b5bd09b2e
commit e60c0de82f
6 changed files with 26 additions and 10 deletions

1
.gitignore vendored
View File

@@ -111,6 +111,7 @@ CMakeUserPresets.json
.nfs* .nfs*
### VisualStudioCode ### ### VisualStudioCode ###
.vscode
.vscode/* .vscode/*
!.vscode/settings.json !.vscode/settings.json
!.vscode/tasks.json !.vscode/tasks.json

View File

@@ -12,8 +12,8 @@ add_library(rtmp SHARED
) )
target_include_directories(rtmp PUBLIC target_include_directories(rtmp PUBLIC
<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include;
<INSTALL_INTERFACE:include> INSTALL_INTERFACE:include;
) )
set_target_properties(rtmp PROPERTIES set_target_properties(rtmp PROPERTIES

View File

@@ -1,4 +1,3 @@
rm -rf build rm -rf build
mkdir build && cd build cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
cmake -DCMAKE_BUILD_TYPE=Release .. cmake build --build
make -j$(nproc)

View File

@@ -309,6 +309,8 @@ using OnDisconnectCallback = std::function<void(std::shared_ptr<RTMPSession>)>;
using AuthCallback = using AuthCallback =
std::function<bool(const std::string &app, const std::string &stream_key, std::function<bool(const std::string &app, const std::string &stream_key,
const std::string &client_ip)>; const std::string &client_ip)>;
using OnLoggerCallback =
std::function<bool(const std::string &message, const LogLevel &logLevel)>;
// Logger // Logger
class Logger { class Logger {
@@ -325,12 +327,16 @@ public:
void warn(const std::string &msg); void warn(const std::string &msg);
void info(const std::string &msg); void info(const std::string &msg);
void debug(const std::string &msg); void debug(const std::string &msg);
void setOnLog(const OnLoggerCallback cb) { on_log = cb; }
private: private:
Logger() : current_level(LogLevel::INFO) {} Logger() : current_level(LogLevel::INFO) {}
LogLevel current_level; LogLevel current_level;
std::mutex log_mutex; std::mutex log_mutex;
// Logger Callback
OnLoggerCallback on_log;
void log(LogLevel level, const std::string &msg); void log(LogLevel level, const std::string &msg);
}; };

View File

@@ -21,6 +21,18 @@ void onPublish(std::shared_ptr<RTMPSession> session, const std::string& app, con
std::cout << "Publish from " << session->getStreamInfo().client_ip << ": " << app << "/" << key << std::endl; 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 struct termios g_orig_termios;
static void restore_terminal() { static void restore_terminal() {
@@ -66,6 +78,7 @@ int main() {
// Set callbacks // Set callbacks
server.setOnConnect(onConnect); server.setOnConnect(onConnect);
server.setOnPublish(onPublish); server.setOnPublish(onPublish);
Logger::getInstance().setOnLog(onLog);
// Enable GOP cache // Enable GOP cache
server.enableGOPCache(true); server.enableGOPCache(true);

View File

@@ -65,11 +65,8 @@ void Logger::log(LogLevel level, const std::string &msg) {
if (level > current_level) if (level > current_level)
return; return;
std::lock_guard<std::mutex> lock(log_mutex); std::lock_guard<std::mutex> lock(log_mutex);
auto now = std::chrono::system_clock::now(); const LogLevel level_enum[] = {LogLevel::ERROR, LogLevel::WARN, LogLevel::INFO, LogLevel::DEBUG};
auto time = std::chrono::system_clock::to_time_t(now); on_log(msg, level);
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;
} }
void Logger::error(const std::string &msg) { log(LogLevel::ERROR, msg); } void Logger::error(const std::string &msg) { log(LogLevel::ERROR, msg); }