Add Logger Callback to Server
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -111,6 +111,7 @@ CMakeUserPresets.json
|
||||
.nfs*
|
||||
|
||||
### VisualStudioCode ###
|
||||
.vscode
|
||||
.vscode/*
|
||||
!.vscode/settings.json
|
||||
!.vscode/tasks.json
|
||||
|
||||
@@ -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
|
||||
|
||||
5
build.sh
5
build.sh
@@ -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
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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); }
|
||||
|
||||
Reference in New Issue
Block a user