11/**
22 * @file fc_log.h
33 * @author fool-cat (2696652257@qq.com)
4- * @brief 参考letter_shell的log组件,log组件核心为行缓冲, [ulog](https://github.com/rdpoor/ulog)
4+ * @brief 参考letter_shell的log组件和 [ulog](https://github.com/rdpoor/ulog)
55 * 使用的宏API设计为可重入模式,可以重新include此文件进行重定义
66 * @version 1.0
77 * @date 2025-01-31
@@ -299,11 +299,11 @@ extern fc_pool_t fc_log_pool; // log组件使用的内存池声明,在fc_log.c
299299
300300//+********************************* 宏API **********************************/
301301
302- // 切换log等级,使用宏API,无需显示指定对象名称,注意使用的时候作用域对象
303- #define fc_log_level (_level ) \
304- do \
305- { \
306- fc_log_set_level((fc_log_t *)(scope_log_ptr ? scope_log_ptr : &FC_LOG_OBJ), _level); \
302+ // 切换log等级,使用宏API,无需显示指定对象名称,设置外部对象,临时对象继承等级不做控制避免歧义
303+ #define fc_log_level (_level ) \
304+ do \
305+ { \
306+ fc_log_set_level((fc_log_t *)(&FC_LOG_OBJ), _level); \
307307 } while (0)
308308
309309#if FC_LOG_ENABLE
@@ -321,39 +321,107 @@ extern fc_pool_t fc_log_pool; // log组件使用的内存池声明,在fc_log.c
321321 #define fc_log_merge (...) \
322322 FC_CONNECT2(fc_log_merge_, __PLOOC_VA_NUM_ARGS(__VA_ARGS__))(__VA_ARGS__)
323323
324- #define fc_log_format (text , _level , fmt , ...) \
325- do \
326- { \
327- if (_level <= FC_LOG_FILE_LEVEL) \
328- 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__); \
329- if (scope_log_ptr) \
330- { \
331- fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
332- SAFE_NAME(log_temp_ptr)->last_level = _level; /* 临时对象实体记录临时等级 */ \
333- } \
324+ #define fc_log_format (text , _level , fmt , ...) \
325+ do \
326+ { \
327+ 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__); \
328+ if (scope_log_ptr) \
329+ { \
330+ fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
331+ SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_ERROR; /* 临时对象实体记录临时等级 */ \
332+ } \
334333 } while (0 )
335334
336- //+********************************* 期望使用 **********************************/
337- #define fc_log_error (fmt , ...) \
338- fc_log_format(FC_ERROR_TEXT, FC_LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
335+ //+********************************* 期望使用 **********************************/
336+ #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_ERROR
337+ #define fc_log_error (fmt , ...) \
338+ fc_log_format(FC_ERROR_TEXT, FC_LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
339+ #else
340+ #define fc_log_error (fmt , ...) \
341+ do \
342+ { \
343+ if (scope_log_ptr) \
344+ { \
345+ fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
346+ SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_ERROR; /* 临时对象实体记录临时等级 */ \
347+ } \
348+ } while (0 );
349+ #endif
339350
340- #define fc_log_warning (fmt , ...) \
341- fc_log_format(FC_WARNING_TEXT, FC_LOG_LEVEL_WARNING, fmt, ##__VA_ARGS__)
351+ #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_WARNING
352+ #define fc_log_warning (fmt , ...) \
353+ fc_log_format(FC_WARNING_TEXT, FC_LOG_LEVEL_WARNING, fmt, ##__VA_ARGS__)
354+ #else
355+ #define fc_log_warning (fmt , ...) \
356+ do \
357+ { \
358+ if (scope_log_ptr) \
359+ { \
360+ fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
361+ SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_WARNING; /* 临时对象实体记录临时等级 */ \
362+ } \
363+ } while (0 );
364+ #endif
342365
343- #define fc_log_info (fmt , ...) \
344- fc_log_format(FC_INFO_TEXT, FC_LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
366+ #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_INFO
367+ #define fc_log_info (fmt , ...) \
368+ fc_log_format(FC_INFO_TEXT, FC_LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
369+ #else
370+ #define fc_log_info (fmt , ...) \
371+ do \
372+ { \
373+ if (scope_log_ptr) \
374+ { \
375+ fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
376+ SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_INFO; /* 临时对象实体记录临时等级 */ \
377+ } \
378+ } while (0 );
379+ #endif
345380
346- #define fc_log_debug (fmt , ...) \
347- fc_log_format(FC_DEBUG_TEXT, FC_LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
381+ #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_DEBUG
382+ #define fc_log_debug (fmt , ...) \
383+ fc_log_format(FC_DEBUG_TEXT, FC_LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
384+ #else
385+ #define fc_log_debug (fmt , ...) \
386+ do \
387+ { \
388+ if (scope_log_ptr) \
389+ { \
390+ fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
391+ SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_DEBUG; /* 临时对象实体记录临时等级 */ \
392+ } \
393+ } while (0 );
394+ #endif
348395
349- #define fc_log_verbose (fmt , ...) \
350- fc_log_format(FC_VERBOSE_TEXT, FC_LOG_LEVEL_VERBOSE, fmt, ##__VA_ARGS__)
396+ #if FC_LOG_FILE_LEVEL >= FC_LOG_LEVEL_VERBOSE
397+ #define fc_log_verbose (fmt , ...) \
398+ fc_log_format(FC_VERBOSE_TEXT, FC_LOG_LEVEL_VERBOSE, fmt, ##__VA_ARGS__)
399+ #else
400+ #define fc_log_verbose (fmt , ...) \
401+ do \
402+ { \
403+ if (scope_log_ptr) \
404+ { \
405+ fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)scope_log_ptr; \
406+ SAFE_NAME(log_temp_ptr)->last_level = FC_LOG_LEVEL_VERBOSE; /* 临时对象实体记录临时等级 */ \
407+ } \
408+ } while (0 );
409+ #endif
351410
352- #define fc_log_printf (fmt , ...) \
353- fc_log_format("", (scope_log_ptr ? scope_log_ptr->last_level : FC_LOG_LEVEL_NONE), fmt, ##__VA_ARGS__);
411+ #define fc_log_printf (fmt , ...) \
412+ do \
413+ { \
414+ fc_log_t *SAFE_NAME(log_temp_ptr) = (fc_log_t *)(scope_log_ptr ? scope_log_ptr : &FC_LOG_OBJ); \
415+ if (SAFE_NAME(log_temp_ptr)->last_level <= FC_LOG_FILE_LEVEL) \
416+ fc_log_format("", SAFE_NAME(log_temp_ptr)->last_level, fmt, ##__VA_ARGS__); \
417+ } while (0)
354418
355- #define fc_log_printf_lv (_level , fmt , ...) \
356- fc_log_format("", _level, fmt, ##__VA_ARGS__);
419+ #define fc_log_printf_lv (_level , fmt , ...) \
420+ do \
421+ { \
422+ if (_level <= FC_LOG_FILE_LEVEL) \
423+ fc_log_format("", _level, fmt, ##__VA_ARGS__); \
424+ } while (0)
357425
358426 #define fc_log_assert (expr , ...) \
359427 if (!(expr)) \
0 commit comments