MS-RTOS 日志
本章将介绍 MS-RTOS 日志 LOG 的使用。
LOG 相关 API
下表展示了 LOG 相关的 API 在两个权限空间下是否可用:
API | 用户空间 | 内核空间 |
---|---|---|
ms_log | ● | ● |
ms_log_set_level | ● | ● |
ms_log_set_fd | ● | ● |
ms_log_crash | ● | |
MS_LOGM | ● | ● |
MS_LOGA | ● | ● |
MS_LOGC | ● | ● |
MS_LOGE | ● | ● |
MS_LOGW | ● | ● |
MS_LOGN | ● | ● |
MS_LOGI | ● | ● |
MS_LOGD | ● | ● |
_MS_LOGM | ● | ● |
_MS_LOGA | ● | ● |
_MS_LOGC | ● | ● |
_MS_LOGE | ● | ● |
_MS_LOGW | ● | ● |
_MS_LOGN | ● | ● |
_MS_LOGI | ● | ● |
_MS_LOGD | ● | ● |
ms_log()
描述 记录一则日志
函数原型
void ms_log(ms_log_level_t level, const char *fmt, ...) MS_LOG_ATTR;
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | level | 日志级别 |
[in] | fmt | 格式化字符串 |
日志级别为以下的宏:
宏 | 值 | 描述 |
---|---|---|
MS_LOG_EMERG | 0U | 紧急事件消息,系统崩溃之前提示,表示系统不可用 |
MS_LOG_ALERT | 1U | 报告消息,表示必须立即采取措施 |
MS_LOG_CRIT | 2U | 临界条件,通常涉及严重的硬件或软件操作失败 |
MS_LOG_ERR | 3U | 错误条件 |
MS_LOG_WARNING | 4U | 警告条件,对可能出现问题的情况进行警告 |
MS_LOG_NOTICE | 5U | 正常但又重要的条件,用于提醒 |
MS_LOG_INFO | 6U | 提示信息 |
MS_LOG_DEBUG | 7U | 调试级别的消息 |
返回值 无
示例 无
日志宏
描述 MS-RTOS 定义了一些日志相关的宏,使用前,需要在源文件里定义
MS_LOG_TAG
字符串。日志宏原型
#define MS_LOGM(fmt, ...) ms_log(MS_LOG_EMERG, "<0>" MS_LOG_TAG fmt, ##__VA_ARGS__)
#define MS_LOGA(fmt, ...) ms_log(MS_LOG_ALERT, "<1>" MS_LOG_TAG fmt, ##__VA_ARGS__)
#define MS_LOGC(fmt, ...) ms_log(MS_LOG_CRIT, "<2>" MS_LOG_TAG fmt, ##__VA_ARGS__)
#define MS_LOGE(fmt, ...) ms_log(MS_LOG_ERR, "<3>" MS_LOG_TAG fmt, ##__VA_ARGS__)
#define MS_LOGW(fmt, ...) ms_log(MS_LOG_WARNING, "<4>" MS_LOG_TAG fmt, ##__VA_ARGS__)
#define MS_LOGN(fmt, ...) ms_log(MS_LOG_NOTICE, "<5>" MS_LOG_TAG fmt, ##__VA_ARGS__)
#define MS_LOGI(fmt, ...) ms_log(MS_LOG_INFO, "<6>" MS_LOG_TAG fmt, ##__VA_ARGS__)
#define MS_LOGD(fmt, ...) ms_log(MS_LOG_DEBUG, "<7>" MS_LOG_TAG fmt, ##__VA_ARGS__)
#define _MS_LOGM(fmt, ...) ms_log(MS_LOG_EMERG, fmt, ##__VA_ARGS__)
#define _MS_LOGA(fmt, ...) ms_log(MS_LOG_ALERT, fmt, ##__VA_ARGS__)
#define _MS_LOGC(fmt, ...) ms_log(MS_LOG_CRIT, fmt, ##__VA_ARGS__)
#define _MS_LOGE(fmt, ...) ms_log(MS_LOG_ERR, fmt, ##__VA_ARGS__)
#define _MS_LOGW(fmt, ...) ms_log(MS_LOG_WARNING, fmt, ##__VA_ARGS__)
#define _MS_LOGN(fmt, ...) ms_log(MS_LOG_NOTICE, fmt, ##__VA_ARGS__)
#define _MS_LOGI(fmt, ...) ms_log(MS_LOG_INFO, fmt, ##__VA_ARGS__)
#define _MS_LOGD(fmt, ...) ms_log(MS_LOG_DEBUG, fmt, ##__VA_ARGS__)
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fmt | 格式化字符串 |
返回值 无
示例 无
ms_log_set_level()
描述 设置
ms_log
函数可记录的日志级别(默认为MS_LOG_DEBUG
)函数原型
ms_err_t ms_log_set_level(ms_log_level_t level);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | level | 日志级别 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例 无
ms_log_set_fd()
描述 设置日志的文件描述符(默认为标准输出文件)
函数原型
ms_err_t ms_log_set_fd(int fd);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fd | 日志的文件描述符 |
返回值 MS-RTOS 内核错误码
注意事项 无
示例
// define log tag
#define MS_LOG_TAG "[test]"
int main(int argc, char *argv[])
{
// create log file
int fd = ms_io_creat("/nor/app_log.txt", 0666);
// set log file
ms_log_set_fd(fd);
// set log level
ms_log_set_level(MS_LOG_DEBUG);
// log info
MS_LOGI("Please wait...");
_MS_LOGI("Done!\n");
// do some thing
return 0;
}
ms_log_crash()
描述 记录一则崩溃日志信息,会通过
ms_bsp_log_write
接口记录崩溃日志信息函数原型
void ms_log_crash(const char *fmt, ...);
- 参数
输入/输出 | 参数 | 描述 |
---|---|---|
[in] | fmt | 格式化字符串 |
返回值 无
注意事项 该函数一般在 CPU 异常处理函数中调用,所以该函数实现时需要确保能在中断环境而非任务环境中断执行
示例 无