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*
### VisualStudioCode ###
.vscode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json

View File

@@ -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

View File

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

View File

@@ -309,6 +309,8 @@ using OnDisconnectCallback = std::function<void(std::shared_ptr<RTMPSession>)>;
using AuthCallback =
std::function<bool(const std::string &app, const std::string &stream_key,
const std::string &client_ip)>;
using OnLoggerCallback =
std::function<bool(const std::string &message, const LogLevel &logLevel)>;
// Logger
class Logger {
@@ -325,12 +327,16 @@ 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);
};

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;
}
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);

View File

@@ -65,11 +65,8 @@ void Logger::log(LogLevel level, const std::string &msg) {
if (level > current_level)
return;
std::lock_guard<std::mutex> 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); }