DLOG-日志系统
什么是日志?
记录发生的某个事件并进行显示或保存到文件中,这就是日志。
OneOS的日志系统叫做DLOG(day log)日志系统。
日志有什么用?
日志有助于程序调试,方便追随问题。
日志可用于系统监控和性能调试,有助于系统维护和管理。
日志标签
标签(tag)用于日志分类,给每条log“附上”标签的属性,方便模块化管理。
标签的名称可以自定义。
日志级别
dlog 前端
(1) dlog 前端兼容 linux syslog 接口(需包含 syslog.h 头文件),接口形式如下: void syslog(int priority, const char *format, ...) 注:若想兼容 linux syslog 接口,需要同时打开 dlog 的编译宏 OS_USING_DLOG 和 syslog 的编译宏 DLOG_USING_SYSLOG,否则不支持。
(2)除了兼容 linux syslog 接口,dlog 前端使用 LOG_X 接口形式实现前端输出。
dlog 核心
(1) 前过滤器包括标签过滤、全局过滤和全局标签过滤,当标签级别过滤器中存在本条日志的标签时,则按照此标签对应的输出级别进行日志输出控制;若不存在,则按照全局的输出级别进行输出控制,标签级别过滤优先于全局级别过滤。当日志级别过滤完成后,进行全局标签过滤,即:若设置了全局过滤标签,则只打印包含此标签的日志。
(2) 格式化模块可以控制哪些日志信息是否输出,可以控制是否支持浮点数打印、是否支持颜色输出、是否支持时间输出以及何种类型的时间、是否输出日志级别信息、是否输出标签信息、是否输出任务线程的名称。
(3) 后过滤器包含全局关键字过滤,即:若设置了全局过滤关键字,则只打印包含此关键字的日志。
(4)dlog 支持异步输出和同步输出。在异步输出模式下,会把日志先存到缓冲区中,待系统空闲时,调用专门的任务线程输出日志到后端;在同步输出模式下,不切换任务(或中断)上下文,直接把日志输出到后端。另外,不管在异步输出模式还是在同步输出模式,都支持在中断上下文打印(需要使能 DLOG_USING_ISR_LOG 编译开关)。
dlog 后端
dlog 可以同时支持形式多样的日志后端,如串口、文件、网络。dlog 提供了统一接口对日志后端进行管理。
目前,dlog 组件已经支持日志后端的文件系统记录功能,以文件的形式将日志信息记录在文件系统中,需要使能 DLOG_BACKEND_USING_FILESYSTEM 编译开关,添加 dlog 日志后端文件系统记录日志功能。用户也可以通过 dlog_backend_register 函数注册自己的后端。
DLOG特点介绍
Dlog API函数
实践步骤
复制之前完成的LED工程改名为DLOG
进入.\OneOS-OneOS_For_OneNET\projects\STM32F407VE_DLOG文件夹打开OneOS_Cube
输入oos config
配置Dlog
S 保存 Q退出
输入oos init -i keil生成代码
打开project.uvprojx,右键application文件夹添加dlog.demo.c文件
#include <oneos_config.h>
#include <os_util.h>
#include <dlog.h>
#include <shell.h>
#define TAG_A "TAG_A"
#define TAG_B "TAG_B"
void sh_dlog_test(int32_t argc, char **argv)
{
LOG_E(TAG_A, "TAG_A DLOG_ERROR");
LOG_W(TAG_A, "TAG_A DLOG_WARNING");
LOG_I(TAG_A, "TAG_A DLOG_INFO");
LOG_D(TAG_A, "TAG_A DLOG_DEBUG");
LOG_E(TAG_B, "TAG_B DLOG_ERROR");
LOG_W(TAG_B, "TAG_B DLOG_WARNING");
LOG_I(TAG_B, "TAG_B DLOG_INFO");
LOG_D(TAG_B, "TAG_B DLOG_DEBUG");
}
SH_CMD_EXPORT(dlog_test, sh_dlog_test, "test dlog tag level");
编译、下载至开发板中,打开MobaXterm
中国移动云盘:链接:https://caiyun.139.com/m/i?2ci6YD1Y5Ne2o提取码:tact
此时按下开发板复位按键,即会显示OneOS初始化信息。
输入shell命令如help,即可查看当前系统支持的所有命令。
双击选中dlog_test
按下鼠标中键或右键选择粘贴,然后回车Enter。
此处的dlog_test对应dlog_demo.c中SH_CMD_EXPORT(dlog_test, sh_dlog_test, "test dlog tag level");
具体相关原理请参考文档中心 (10086.cn)Shell控制台组件。
在主程序中使用Dlog
下载编译至开发板中