在现代软件开发中,日志记录系统是不可或缺的一部分。它不仅可以帮助开发人员在应用程序中定位和解决问题,还可以用于监控、性能分析、安全审计等方面。本文将介绍日志记录系统的基本概念、重要性以及如何构建一个高效的日志记录系统。
日志是应用程序在运行时生成的文本消息,用于记录关键事件、错误信息、警告以及其他有价值的信息。日志记录系统的作用如下:
Rlog作为一款高性能的纯C语言日志组件,为开发人员提供了一种轻松、灵活且可定制的日志记录解决方案。其简单的接口和插件扩展功能使得它适用于各种不同规模和类型的项目。无论是小型应用程序还是大型系统,Rlog都能为您提供高效的日志记录支持,帮助您更好地理解和管理应用程序的运行状态。
.
├── example
│ ├── rlog_linux_adapter.c /* linux环境下的适配接口 */
│ └── rlog_rtt_adapter.c /* rt-thread环境下的适配接口 */
├── include/
│ ├── rlog_adapter.h /* rlog适配描述 */
│ └── rlog.h /* rlog对外接口 */
├── main.c /* rlog的测试样例 */
├── Makefile /* linux环境rlog构建Makefile */
├── plug-in /* 输出端点插件的存放路径 */
├── SConscript /* rt-thread环境rlog构建脚本 */
└── src
├── rlog.c /* rlog核心代码 */
├── rlog_def.h /* rlog核心代码使用的定义 */
└── rlog_utils.c /* rlog使用的C库接口 */
配置描述如下:
/* Enable log output */
#define RLOG_OUTPUT_ENABLE 1
/* Set log output level, rang: from RLOG_LEVEL_ASSERT to RLOG_LEVEL_VERBOSE */
#define RLOG_OUTPUT_LEVEL RLOG_LEVEL_VERBOSE
/* Enable log color */
#define RLOG_COLOUR_ENABLE 1
/* Enable log color */
#define RLOG_TIME_ENABLE 1
/* Support log include directory */
#define RLOG_DIRECTORY_ENABLE 1
/* Support log include funtiong name */
#define RLOG_FUNCTION_ENABLE 1
/* Support log include line number*/
#define RLOG_LINE_ENABLE 1
/* Buffer size for every line's log */
#define RLOG_LINE_BUFF_LEN 128
/* Output line number max length */
#define RLOG_LINE_NUM_SIZE 5
/* Output newline sign */
#define RLOG_NEWLINE_SIGN "\r\n"
/* Enable assert check */
#define RLOG_ASSERT_ENABLE 1
/* Log function. default FDB_PRINT macro is printf() */
#define RLOG_PRINT(...) printf(__VA_ARGS__)
宏 | 描述 |
---|---|
RLOG_OUTPUT_ENABLE | rlog日志输出总开关 |
RLOG_OUTPUT_LEVEL | rlog日志输出等级总开关 |
RLOG_COLOUR_ENABLE | rlog日志等级输出带颜色开关 |
RLOG_TIME_ENABLE | rlog日志等级输出带时间开关 |
RLOG_DIRECTORY_ENABLE | rlog日志等级输出带文件路径开关 |
RLOG_FUNCTION_ENABLE | rlog日志等级输出带函数名开关 |
RLOG_LINE_ENABLE | rlog日志等级输出带行号开关 |
RLOG_LINE_BUFF_LEN | rlog每一条日志最大长度 |
RLOG_LINE_NUM_SIZE | rlog日志等级输出行号的最大长度 |
RLOG_NEWLINE_SIGN | rlog日志换行符格式 |
RLOG_ASSERT_ENABLE | rlog使用assert功能 |
RLOG_PRINT(...) | rlog中断输出设置,如rt-thread采用rt_kprintf, linux采用printf |
/**
* RLog output enable
*
* @param enable true: enable output, false: disable output
*/
void rlog_enable(bool enable);
/**
* RLog output color enable
*
* @param enable true: enable output color, false: disable output color
*/
void rlog_color_enable(bool enable);
/**
* RLog level output format setting
*
* @param level log level
* @param format log format
*/
void rlog_level_fmt_set(rlog_lvl_t level, int format);
/**
* RLog level output format setting
*
* @param level log level
* @param format log format
*
* @return result true: supported format, false: unsupported format
*/
bool rlog_level_fmt_get(rlog_lvl_t level, int format);
/**
* RLog filter the content of the log level
*
* @param level log level
*/
void rlog_level_filter_set(rlog_lvl_t level);
配置函数 | 描述 |
---|---|
rlog_enable | rlog日志输出使能开光 |
rlog_color_enable | rlog日志等级输出带颜色开关 |
rlog_level_fmt_set | rlog日志等级输出格式设置,RLOG_FMT_LVL/RLOG_FMT_TAG/RLOG_FMT_TIME/RLOG_FMT_DIR/RLOG_FMT_FUNC/RLOG_FMT_LINE |
rlog_level_fmt_get | rlog日志等级输出格式获取 |
rlog_level_filter_set | rlog日志等级输出过滤设置 |
void rlog_adapter_init(void);
void rlog_adapter_deinit(void);
void rlog_lock(void);
void rlog_unlock(void);
char *rlog_get_time(void);
void rlog_output(const char *log, uint16_t len);
适配函数 | 描述 |
---|---|
rlog_adapter_init | rlog适配层初始化,如端点插件初始化 |
rlog_adapter_deinit | rlog适配层去初始化,如端点插件去初始化 |
rlog_lock | rlog日志锁,为rlog提供线程安全 |
rlog_unlock | rlog日志解锁,为rlog提供线程安全 |
rlog_get_time | rlog日志提供时间 |
rlog_output | rlog日志输出适配接口 |
static pthread_mutex_t mutex;
void rlog_lock(void)
{
pthread_mutex_lock(&mutex);
}
void rlog_unlock(void)
{
pthread_mutex_unlock(&mutex);
}
char *rlog_get_time(void)
{
#define TIME_STR_SIZE 32
static char time_str[TIME_STR_SIZE] = {0};
time_t tmp;
struct tm *timp;
time(&tmp);
timp = localtime(&tmp);
memset(time_str, 0, TIME_STR_SIZE);
rlog_snprintf(time_str, TIME_STR_SIZE, "%04d-%02d-%02d %02d:%02d:%02d",
(1900 + timp->tm_year), (1 + timp->tm_mon), timp->tm_mday,
timp->tm_hour, timp->tm_min, timp->tm_sec);
return time_str;
}
void rlog_output(const char *log, uint16_t len)
{
RLOG_PRINT("%.*s", len, log);
}
void rlog_adapter_init(void)
{
pthread_mutex_init(&mutex, NULL);
}
void rlog_adapter_deinit(void)
{
pthread_mutex_destroy(&mutex);
}
youyeetoo@youyeetoo:~$ git clone https://gitee.com/RiceChen0/rlog.git
youyeetoo@youyeetoo:~/rlog$ make
youyeetoo@youyeetoo:~/rlog$ ./output/rlog_1.0.0
RLog Version: v1.0.0
RLog Author: RiceChen
RLog Contact: https://gitee.com/RiceChen0/rlog
Youyeetoo
(2023-08-15 18:53:27)[main.c main:12]I/RLOG: Youyeetoo
RLOG HexDump--Title: RLOG, len: 9
00000000: 59 6F 75 79 65 65 74 6F 6F Youyeetoo
本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!