Add Logger Callback to Server
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
5
build.sh
5
build.sh
@@ -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)
|
|
||||||
@@ -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,11 +327,15 @@ 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);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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); }
|
||||||
|
|||||||
Reference in New Issue
Block a user