@@ -203,9 +203,8 @@ struct _fc_log_t
203203 fc_log_alloc_t alloc ;
204204 fc_log_write_t write ;
205205
206- fc_log_file_user_t file_user ; // 缓冲输出的临时对象中才会使用
207- FC_FILE f ; // 输出对象,同样只在临时对象中才会使用
208- fc_log_level_t last_level ; // 记录上次临时log对象输出等级
206+ fc_log_file_user_t file_user ; // 缓冲输出的临时对象中才会使用
207+ FC_FILE f ; // 输出对象,同样只在临时对象中才会使用
209208
210209 fc_log_level_t level ;
211210 bool merge ; /**< 是否合并日志一并输出 */
@@ -227,7 +226,10 @@ extern "C"
227226
228227 // clang-format on
229228
230- void fc_log_fflush (fc_log_t * log ); // 输出缓冲区
229+ extern size_t fc_log_level_roll (fc_log_t * log ); // 等级单次滚动(循环),返回改变后的等级
230+ extern const char * fc_log_level_name (fc_log_t * log ); // 获取等级字符串
231+
232+ extern void fc_log_fflush (fc_log_t * log ); // 输出缓冲区
231233 // extern size_t fc_log_lose(fc_log_t *log, int len); // 获取丢失日志长度
232234
233235 // 提供一份默认的弱函数log写丢失数据钩子,可以在外面重写
@@ -284,9 +286,10 @@ extern fc_pool_t fc_log_pool; // log组件使用的内存池声明,在fc_log.c
284286
285287//+********************************* 以下部分允许重入 **********************************/
286288#undef fc_log_level
289+ #undef fc_log_lv_roll
290+ #undef fc_log_lv_name
287291
288292#undef FC_LOG_MERGE
289- #undef fc_log_level_record
290293#undef fc_log_format
291294
292295#undef fc_log_error
@@ -305,13 +308,19 @@ extern fc_pool_t fc_log_pool; // log组件使用的内存池声明,在fc_log.c
305308
306309//+********************************* 宏API **********************************/
307310
308- // 切换log等级 ,使用宏API,无需显示指定对象名称,设置外部对象,临时对象继承等级不做控制避免歧义
311+ // 设置log等级 ,使用宏API,无需显示指定对象名称,设置外部对象,临时对象继承等级不做控制避免歧义
309312#define fc_log_level (_level ) \
310313 do \
311314 { \
312315 fc_log_set_level((fc_log_t *)(&FC_LOG_OBJ), _level); \
313316 } while (0)
314317
318+ #define fc_log_lv_roll () \
319+ fc_log_level_roll((fc_log_t *)(&FC_LOG_OBJ))
320+
321+ #define fc_log_lv_name () \
322+ fc_log_level_name((fc_log_t *)(&FC_LOG_OBJ))
323+
315324#if FC_LOG_ENABLE
316325
317326 // 统一实现:C和C++模式都不接受参数,避免兼容性问题
@@ -322,117 +331,104 @@ extern fc_pool_t fc_log_pool; // log组件使用的内存池声明,在fc_log.c
322331 scope_log_ptr->merge = true, \
323332 fc_log_fflush(scope_log_ptr))
324333
325- #define fc_log_level_record (_level ) \
326- do \
327- { \
328- if (scope_log_ptr) \
329- { \
330- fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
331- if (SAFE_NAME(log_temp_ptr)->merge) \
332- SAFE_NAME(log_temp_ptr)->last_level = _level; /* 临时对象实体记录临时等级 */ \
333- } \
334- } while (0 );
335-
336334// 把fc_log_level_record在format中展开,减少一次do...while(0)的开销
337- #define fc_log_format (text , _level , fmt , ...) \
338- do \
339- { \
340- fc_log_fprintf((fc_log_t *)(scope_log_ptr ? scope_log_ptr : &FC_LOG_OBJ), _level, text "" fmt "" FC_LOG_END, FC_LOG_PREFIX_CONTENT, ##__VA_ARGS__); \
341- if (scope_log_ptr) \
342- { \
343- fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
344- if (SAFE_NAME(log_temp_ptr)->merge) \
345- SAFE_NAME(log_temp_ptr)->last_level = _level; /* 临时对象实体记录临时等级 */ \
346- } \
335+ #define fc_log_format (text , _level , fmt , ...) \
336+ do \
337+ { \
338+ fc_log_fprintf((fc_log_t *)(scope_log_ptr ? scope_log_ptr : &FC_LOG_OBJ), \
339+ _level, \
340+ text "" fmt "" FC_LOG_END, \
341+ FC_LOG_PREFIX_CONTENT, \
342+ ##__VA_ARGS__); \
347343 } while (0)
348344
349345 //+********************************* 期望使用 **********************************/
350346 #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_ERROR
351347 #define fc_log_error (fmt , ...) \
352348 fc_log_format(FC_ERROR_TEXT, FC_LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
353349 #else
354- #define fc_log_error (fmt , ...) \
355- fc_log_level_record(FC_LOG_LEVEL_ERROR)
350+ #define fc_log_error (fmt , ...) ((void)(0))
356351 #endif
357352
358353 #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_WARNING
359354 #define fc_log_warning (fmt , ...) \
360355 fc_log_format(FC_WARNING_TEXT, FC_LOG_LEVEL_WARNING, fmt, ##__VA_ARGS__)
361356 #else
362- #define fc_log_warning (fmt , ...) \
363- fc_log_level_record(FC_LOG_LEVEL_WARNING)
357+ #define fc_log_warning (fmt , ...) ((void)(0))
364358 #endif
365359
366360 #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_INFO
367361 #define fc_log_info (fmt , ...) \
368362 fc_log_format(FC_INFO_TEXT, FC_LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
369363 #else
370- #define fc_log_info (fmt , ...) \
371- fc_log_level_record(FC_LOG_LEVEL_INFO)
364+ #define fc_log_info (fmt , ...) ((void)(0))
372365 #endif
373366
374367 #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_DEBUG
375368 #define fc_log_debug (fmt , ...) \
376369 fc_log_format(FC_DEBUG_TEXT, FC_LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
377370 #else
378- #define fc_log_debug (fmt , ...) \
379- fc_log_level_record(FC_LOG_LEVEL_DEBUG)
371+ #define fc_log_debug (fmt , ...) ((void)(0))
380372 #endif
381373
382374 #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_VERBOSE
383375 #define fc_log_verbose (fmt , ...) \
384376 fc_log_format(FC_VERBOSE_TEXT, FC_LOG_LEVEL_VERBOSE, fmt, ##__VA_ARGS__)
385377 #else
386- #define fc_log_verbose (fmt , ...) \
387- fc_log_level_record(FC_LOG_LEVEL_VERBOSE)
378+ #define fc_log_verbose (fmt , ...) ((void)(0))
388379 #endif
389380
390- #define fc_log_printf (fmt , ...) \
391- do \
392- { \
393- fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)(scope_log_ptr ? scope_log_ptr : &FC_LOG_OBJ); \
394- if (SAFE_NAME(log_temp_ptr)->last_level <= FC_LOG_FILE_LEVEL) \
395- fc_log_format("", SAFE_NAME(log_temp_ptr)->last_level, fmt, ##__VA_ARGS__); \
396- } while (0)
397-
398- #define fc_log_printf_lv (_level , fmt , ...) \
399- do \
400- { \
401- if (_level <= FC_LOG_FILE_LEVEL) \
402- fc_log_format("", _level, fmt, ##__VA_ARGS__); \
403- } while (0)
404-
405381 #define fc_log_assert (expr , ...) \
406382 if (!(expr)) \
407383 { \
408384 fc_log_error("\"" #expr "\" assert failed at file: %s, line: %d\r\n", __FILE__, __LINE__); \
409385 __VA_ARGS__; \
410386 }
411387
388+ #define fc_log_printf (fmt , ...) \
389+ do \
390+ { \
391+ fc_log_fprintf((fc_log_t *)(scope_log_ptr ? scope_log_ptr : &FC_LOG_OBJ), FC_LOG_LEVEL_NONE, \
392+ "" fmt "" FC_LOG_END, \
393+ ##__VA_ARGS__); \
394+ } while (0)
395+
396+ #define fc_log_printf_lv (_level , fmt , ...) \
397+ do \
398+ { \
399+ if (_level <= FC_LOG_FILE_LEVEL) /* 开优化这里可以编译期处理 */ \
400+ { \
401+ fc_log_fprintf ((fc_log_t * )(scope_log_ptr ? scope_log_ptr : & FC_LOG_OBJ ), \
402+ _level , \
403+ "" fmt "" FC_LOG_END , \
404+ ##__VA_ARGS__ ); \
405+ } \
406+ } while (0 )
407+
412408 /**
413409 * @brief fc_log_write如果是全局的则强制以最高等级输出,如果是fc_log_merge作用域内,则上一条log什么等级,接下来的write就以什么等级输出
414410 *
415411 */
416- #define fc_log_write (buf , len ) \
417- do \
418- { \
419- fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)(scope_log_ptr ? scope_log_ptr : &FC_LOG_OBJ); \
420- fc_log_fwrite(SAFE_NAME(log_temp_ptr), SAFE_NAME(log_temp_ptr)->last_level, buf, len); \
412+ #define fc_log_write (buf , len ) \
413+ do \
414+ { \
415+ fc_log_fwrite((fc_log_t *)(scope_log_ptr ? scope_log_ptr : &FC_LOG_OBJ), \
416+ FC_LOG_LEVEL_NONE, \
417+ buf, \
418+ len); \
421419 } while (0)
422420
423421 #define fc_log_write_lv (_level , buf , len ) \
424422 do \
425423 { \
426- if (_level <= FC_LOG_FILE_LEVEL) \
424+ if (_level <= FC_LOG_FILE_LEVEL) /* 开优化这里可以编译期处理 */ \
427425 fc_log_fwrite ((fc_log_t * )(scope_log_ptr ? scope_log_ptr : & FC_LOG_OBJ ), _level , buf , len ); \
428426 } while (0 )
429427
430428#else
431429 #define FC_LOG_MERGE // 空定义即可
432430
433431// clang-format off
434-
435- #define fc_log_level_record (_level ) ((void)0)
436432 #define fc_log_format (text , level , fmt , ...) ((void)0)
437433 #define fc_log_error (fmt , ...) ((void)0)
438434 #define fc_log_warning (fmt , ...) ((void)0)
0 commit comments