From 57e91054af22a3854cbe55af0caae118bd8bfa62 Mon Sep 17 00:00:00 2001 From: ziyue <1213642868@qq.com> Date: Mon, 30 Aug 2021 20:43:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E6=97=A5=E5=BF=97=E7=9B=B8?= =?UTF-8?q?=E5=85=B3pr:=20#1077?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rdpart/ZLToolKit | 2 +- api/include/mk_common.h | 36 ++++++++----------------- api/include/mk_events.h | 4 +-- api/source/mk_common.cpp | 50 ++++++++++++----------------------- api/source/mk_events.cpp | 15 ++++++----- api/tests/h264_media_server.c | 1 + api/tests/pusher.c | 1 + api/tests/server.c | 1 + api/tests/websocket.c | 1 + src/Common/config.cpp | 1 - src/Common/config.h | 4 --- 11 files changed, 43 insertions(+), 73 deletions(-) diff --git a/3rdpart/ZLToolKit b/3rdpart/ZLToolKit index 6214f502..36d1122f 160000 --- a/3rdpart/ZLToolKit +++ b/3rdpart/ZLToolKit @@ -1 +1 @@ -Subproject commit 6214f5028763c5245d79d4c6c9d50bc780c8d6b7 +Subproject commit 36d1122f42ab6b92d0ca8f57df0462acc632efc7 diff --git a/api/include/mk_common.h b/api/include/mk_common.h index 15857091..01a6af00 100755 --- a/api/include/mk_common.h +++ b/api/include/mk_common.h @@ -38,18 +38,25 @@ extern "C" { #endif +//输出日志到shell +#define LOG_CONSOLE (1 << 0) +//输出日志到文件 +#define LOG_FILE (1 << 1) +//输出日志到回调函数(mk_events::on_mk_log) +#define LOG_CALLBACK (1 << 2) + typedef struct { // 线程数 int thread_num; // 日志级别,支持0~4 int log_level; + //控制日志输出的掩模,请查看LOG_CONSOLE、LOG_FILE、LOG_CALLBACK等宏 + int log_mask; //文件日志保存路径,路径可以不存在(内部可以创建文件夹),设置为NULL关闭日志输出至文件 const char *log_file_path; //文件日志保存天数,设置为0关闭日志文件 int log_file_days; - // 是否关闭 控制台 日志 - int disable_console_log; // 配置文件是内容还是路径 int ini_is_path; @@ -79,6 +86,7 @@ API_EXPORT void API_CALL mk_stop_all_server(); * 基础类型参数版本的mk_env_init,为了方便其他语言调用 * @param thread_num 线程数 * @param log_level 日志级别,支持0~4 + * @param log_mask 日志输出方式掩模,请查看LOG_CONSOLE、LOG_FILE、LOG_CALLBACK等宏 * @param log_file_path 文件日志保存路径,路径可以不存在(内部可以创建文件夹),设置为NULL关闭日志输出至文件 * @param log_file_days 文件日志保存天数,设置为0关闭日志文件 * @param ini_is_path 配置文件是内容还是路径 @@ -89,6 +97,7 @@ API_EXPORT void API_CALL mk_stop_all_server(); */ API_EXPORT void API_CALL mk_env_init1(int thread_num, int log_level, + int log_mask, const char *log_file_path, int log_file_days, int ini_is_path, @@ -96,29 +105,6 @@ API_EXPORT void API_CALL mk_env_init1(int thread_num, int ssl_is_path, const char *ssl, const char *ssl_pwd); - /** - * 基础类型参数版本的mk_env_init,为了方便其他语言调用 - * @param thread_num 线程数 - * @param log_level 日志级别,支持0~4 - * @param log_file_path 文件日志保存路径,路径可以不存在(内部可以创建文件夹),设置为NULL关闭日志输出至文件 - * @param log_file_days 文件日志保存天数,设置为0关闭日志文件 - * @param ini_is_path 配置文件是内容还是路径 - * @param ini 配置文件内容或路径,可以为NULL,如果该文件不存在,那么将导出默认配置至该文件 - * @param ssl_is_path ssl证书是内容还是路径 - * @param ssl ssl证书内容或路径,可以为NULL - * @param ssl_pwd 证书密码,可以为NULL - * @param disable_console_log 是否关闭 控制台 日志 - */ -API_EXPORT void API_CALL mk_env_init2(int thread_num, - int log_level, - const char *log_file_path, - int log_file_days, - int ini_is_path, - const char *ini, - int ssl_is_path, - const char *ssl, - const char *ssl_pwd, - int disable_console_log); /** * 设置配置项 diff --git a/api/include/mk_events.h b/api/include/mk_events.h index ef0a9996..2692ccd2 100644 --- a/api/include/mk_events.h +++ b/api/include/mk_events.h @@ -159,10 +159,10 @@ typedef struct { * @param level 日志级别 * @param file 源文件名 * @param line 源文件行 - * @param function 源文件方法 + * @param function 源文件函数名 * @param message 日志内容 */ - void (API_CALL *on_mk_log)(int level, const char* file, int line, const char *function, const char* message); + void (API_CALL *on_mk_log)(int level, const char *file, int line, const char *function, const char *message); } mk_events; diff --git a/api/source/mk_common.cpp b/api/source/mk_common.cpp index 0ab222e8..1db7057f 100644 --- a/api/source/mk_common.cpp +++ b/api/source/mk_common.cpp @@ -35,18 +35,19 @@ static std::shared_ptr rtpServer; #endif //////////////////////////environment init/////////////////////////// + API_EXPORT void API_CALL mk_env_init(const mk_config *cfg) { assert(cfg); - mk_env_init2(cfg->thread_num, + mk_env_init1(cfg->thread_num, cfg->log_level, + cfg->log_mask, cfg->log_file_path, cfg->log_file_days, cfg->ini_is_path, cfg->ini, cfg->ssl_is_path, cfg->ssl, - cfg->ssl_pwd, - cfg->disable_console_log); + cfg->ssl_pwd); } extern void stopAllTcpServer(); @@ -63,6 +64,7 @@ API_EXPORT void API_CALL mk_stop_all_server(){ API_EXPORT void API_CALL mk_env_init1(int thread_num, int log_level, + int log_mask, const char *log_file_path, int log_file_days, int ini_is_path, @@ -70,42 +72,24 @@ API_EXPORT void API_CALL mk_env_init1(int thread_num, int ssl_is_path, const char *ssl, const char *ssl_pwd) { - mk_env_init2( - thread_num, - log_level, - log_file_path, - log_file_days, - ini_is_path, - ini, - ssl_is_path, - ssl, - ssl_pwd, - 0 - ); -} - -API_EXPORT void API_CALL mk_env_init2(int thread_num, - int log_level, - const char *log_file_path, - int log_file_days, - int ini_is_path, - const char *ini, - int ssl_is_path, - const char *ssl, - const char *ssl_pwd, - int disable_console_log) { //确保只初始化一次 static onceToken token([&]() { - if(disable_console_log) { - // 广播日志 - Logger::Instance().add(std::make_shared("EventChannel", (LogLevel) log_level)); - } else { + if (log_mask & LOG_CONSOLE) { //控制台日志 Logger::Instance().add(std::make_shared("ConsoleChannel", (LogLevel) log_level)); } - if(log_file_path && log_file_days){ + + if (log_mask & LOG_CALLBACK) { + //广播日志 + Logger::Instance().add(std::make_shared("EventChannel", (LogLevel) log_level)); + } + + if (log_mask & LOG_FILE) { //日志文件 - auto channel = std::make_shared("FileChannel", File::absolutePath(log_file_path, ""), (LogLevel) log_level); + auto channel = std::make_shared("FileChannel", + log_file_path ? File::absolutePath(log_file_path, "") : + exeDir() + "log/", (LogLevel) log_level); + channel->setMaxDay(log_file_days ? log_file_days : 1); Logger::Instance().add(channel); } diff --git a/api/source/mk_events.cpp b/api/source/mk_events.cpp index 51e4fb79..0d5275e8 100644 --- a/api/source/mk_events.cpp +++ b/api/source/mk_events.cpp @@ -20,13 +20,13 @@ static void* s_tag; static mk_events s_events = {0}; API_EXPORT void API_CALL mk_events_listen(const mk_events *events){ - if(events){ - memcpy(&s_events,events, sizeof(s_events)); - }else{ - memset(&s_events,0,sizeof(s_events)); + if (events) { + memcpy(&s_events, events, sizeof(s_events)); + } else { + memset(&s_events, 0, sizeof(s_events)); } - static onceToken tokne([]{ + static onceToken token([]{ NoticeCenter::Instance().addListener(&s_tag,Broadcast::kBroadcastMediaChanged,[](BroadcastMediaChangedArgs){ if(s_events.on_mk_media_changed){ s_events.on_mk_media_changed(bRegist, @@ -152,9 +152,10 @@ API_EXPORT void API_CALL mk_events_listen(const mk_events *events){ } }); - NoticeCenter::Instance().addListener(&s_tag, Broadcast::kBroadcastLog,[](BroadcastLogArgs){ + NoticeCenter::Instance().addListener(&s_tag, EventChannel::kBroadcastLogEvent,[](BroadcastLogEventArgs){ if (s_events.on_mk_log) { - s_events.on_mk_log((int)level, file, line, function, message); + auto log = ctx->str(); + s_events.on_mk_log((int) ctx->_level, ctx->_file.data(), ctx->_line, ctx->_function.data(), log.data()); } }); }); diff --git a/api/tests/h264_media_server.c b/api/tests/h264_media_server.c index a5aced5c..3ea51733 100644 --- a/api/tests/h264_media_server.c +++ b/api/tests/h264_media_server.c @@ -37,6 +37,7 @@ int main(int argc, char *argv[]) { .ini = NULL, .ini_is_path = 1, .log_level = 0, + .log_mask = LOG_CONSOLE, .log_file_path = NULL, .log_file_days = 0, .ssl = NULL, diff --git a/api/tests/pusher.c b/api/tests/pusher.c index f7bdf5fa..0d99d97f 100644 --- a/api/tests/pusher.c +++ b/api/tests/pusher.c @@ -164,6 +164,7 @@ int main(int argc, char *argv[]){ .ini = NULL, .ini_is_path = 0, .log_level = 0, + .log_mask = LOG_CONSOLE, .ssl = NULL, .ssl_is_path = 1, .ssl_pwd = NULL, diff --git a/api/tests/server.c b/api/tests/server.c index 48ef088b..2786fd73 100644 --- a/api/tests/server.c +++ b/api/tests/server.c @@ -402,6 +402,7 @@ int main(int argc, char *argv[]) { .ini = ini_path, .ini_is_path = 1, .log_level = 0, + .log_mask = LOG_CONSOLE, .log_file_path = NULL, .log_file_days = 0, .ssl = ssl_path, diff --git a/api/tests/websocket.c b/api/tests/websocket.c index 19d989e9..0c6113ac 100644 --- a/api/tests/websocket.c +++ b/api/tests/websocket.c @@ -190,6 +190,7 @@ int main(int argc, char *argv[]) { .ini = ini_path, .ini_is_path = 1, .log_level = 0, + .log_mask = LOG_CONSOLE, .ssl = ssl_path, .ssl_is_path = 1, .ssl_pwd = NULL, diff --git a/src/Common/config.cpp b/src/Common/config.cpp index 2245215d..2b3db74a 100644 --- a/src/Common/config.cpp +++ b/src/Common/config.cpp @@ -53,7 +53,6 @@ const string kBroadcastShellLogin = "kBroadcastShellLogin"; const string kBroadcastNotFoundStream = "kBroadcastNotFoundStream"; const string kBroadcastStreamNoneReader = "kBroadcastStreamNoneReader"; const string kBroadcastHttpBeforeAccess = "kBroadcastHttpBeforeAccess"; -const string kBroadcastLog = "kBroadcastEventLog"; } //namespace Broadcast //通用配置项目 diff --git a/src/Common/config.h b/src/Common/config.h index cfb70c64..b8def890 100644 --- a/src/Common/config.h +++ b/src/Common/config.h @@ -105,10 +105,6 @@ extern const string kBroadcastStreamNoneReader; extern const string kBroadcastReloadConfig; #define BroadcastReloadConfigArgs void -//日志输出广播,目的是为了通过C API运行时,由上级程序打印日志 -extern const string kBroadcastLog; -#define BroadcastLogArgs const LogLevel level, const char* file, int line, const char* function, const char* message - #define ReloadConfigTag ((void *)(0xFF)) #define RELOAD_KEY(arg,key) \ do { \