diff --git a/src/cm_concurrency/cm_signal.h b/src/cm_concurrency/cm_signal.h index 65d548ab5d9aac2edb9ca23423206f31bb10b1fb..193669f64ae8000ad64a67e231df1cd7768c526c 100644 --- a/src/cm_concurrency/cm_signal.h +++ b/src/cm_concurrency/cm_signal.h @@ -40,6 +40,7 @@ extern "C" { #define SIGRTMAX 64 #endif +#define SIG_DYN_LOG ((SIGRTMIN) + 4) #define SIG_BACKTRACE ((SIGRTMIN) + 8) typedef void (*signal_proc)(int32); diff --git a/src/cm_utils/cm_blackbox.c b/src/cm_utils/cm_blackbox.c index 63d4022c071e79dad07c5a521ca2e16884c99d8b..ab3b4ebe67add1da6f859abd428dbd9cfe9bcff9 100644 --- a/src/cm_utils/cm_blackbox.c +++ b/src/cm_utils/cm_blackbox.c @@ -326,8 +326,13 @@ void cm_sig_collect_backtrace(uint32 log_id, thread_t* thread, const char *forma cnt++; } if (g_sig_bt_buffer.status == SIG_BUFFER_COLLECTED) { - LOG_BLACKBOX_INF("%s", log_head); - LOG_BLACKBOX_INF("%s", g_sig_bt_buffer.buf); + if (log_id== LOG_BLACKBOX) { + LOG_BLACKBOX_INF("%s", log_head); + LOG_BLACKBOX_INF("%s", g_sig_bt_buffer.buf); + } else { + LOG_DYNAMIC_INF("%s", log_head); + LOG_DYNAMIC_INF("%s", g_sig_bt_buffer.buf); + } } g_sig_bt_buffer.status = SIG_BUFFER_IDLE; cm_spin_unlock(&g_sig_bt_buffer.lock); diff --git a/src/cm_utils/cm_log.c b/src/cm_utils/cm_log.c index 9ef8aa0bd47bd4bf4ba5a13353b505f35e825179..35ad838decebfe0a6ff182f2a16d022b2b9d1a7c 100644 --- a/src/cm_utils/cm_log.c +++ b/src/cm_utils/cm_log.c @@ -78,7 +78,10 @@ static log_file_handle_t g_logger[LOG_COUNT] = { .file_inode = 0 }, [LOG_DMS_RFM_TRC] = { .file_handle = CM_INVALID_FD, - .file_inode = 0 } + .file_inode = 0 }, + [LOG_DYNAMIC] = { + .file_handle = CM_INVALID_FD, + .file_inode = 0 }, }; #define MAX_THREAD_NUM_COUNT 1000 @@ -758,7 +761,8 @@ static void cm_write_log_file(log_file_handle_t *log_file_handle, char *buf, uin if (log_file_handle->file_handle != CM_INVALID_FD && buf != NULL) { // Replace the string terminator '\0' with newline character '\n'. if (log_file_handle->log_type != LOG_MEC && log_file_handle->log_type != LOG_BLACKBOX && - log_file_handle->log_type != LOG_DMS_RFM_TRC && log_file_handle->log_type != LOG_DMS_EVT_TRC) { + log_file_handle->log_type != LOG_DMS_RFM_TRC && log_file_handle->log_type != LOG_DMS_EVT_TRC + && log_file_handle->log_type != LOG_DYNAMIC) { buf[size] = '\n'; size++; } @@ -1493,6 +1497,21 @@ void cm_write_blackbox_log(const char *format, ...) va_end(args); } +void cm_write_dynamic_log(const char *format, ...) +{ + char buf[CM_MAX_LOG_CONTENT_LENGTH + 1]; + buf[0] = '\0'; + text_t buf_text; + log_file_handle_t *log_file_handle = &g_logger[LOG_DYNAMIC]; + + va_list args; + va_start(args, format); + buf_text.str = buf; + buf_text.len = (uint32)strlen(buf); + cm_log_fulfil_write_buf(log_file_handle, &buf_text, sizeof(buf), CM_TRUE, format, args); + va_end(args); +} + static uint64 g_tracekey = (uint64)-1; void set_trace_key(uint64 tracekey) diff --git a/src/cm_utils/cm_log.h b/src/cm_utils/cm_log.h index 5cf10962d417e77aac64de1e53425a845a815996..73b25c7627b811fce694c3de3497ca5dca9c3301 100644 --- a/src/cm_utils/cm_log.h +++ b/src/cm_utils/cm_log.h @@ -53,6 +53,7 @@ typedef enum en_log_type { LOG_BLACKBOX, LOG_DMS_EVT_TRC, LOG_DMS_RFM_TRC, + LOG_DYNAMIC, LOG_COUNT // LOG COUNT } log_type_t; @@ -204,6 +205,7 @@ void cm_write_normal_log_common(log_type_t log_type, log_level_t log_level, cons uint32 code_line_num, const char *module_name, bool32 need_rec_filelog, const char *format, va_list args); void cm_write_blackbox_log(const char *format, ...) CM_CHECK_FMT(1, 2); status_t cm_recovery_log_file(log_type_t log_type); +void cm_write_dynamic_log(const char *format, ...) CM_CHECK_FMT(1, 2); #define LOG_DYN_TRC_CB (cm_log_param_instance()->dyn_trc_cbs.dyn_trc) @@ -242,6 +244,13 @@ status_t cm_recovery_log_file(log_type_t log_type); } \ } while (0) +#define LOG_DYNAMIC_INF(format, ...) \ + do { \ + if (LOG_ON) { \ + cm_write_dynamic_log(format, ##__VA_ARGS__); \ + } \ + } while (0) + #define DEBUG_LOG(level, level_str, format, ...) \ do { \ if (CM_DYNAMIC_TRACE_ENABLED && CM_DYN_TRC_TRACE_LOGS) { \