一 应用场景简介
在QNX系统上开发的应用需要打印日志以帮助开发人员排查相关问题,在C/C++程序中可以使用printf输出到控制台,但很多程序在后台运行,因此借助slog2相关API封装成日志类用于向slog输出日志。
二 QNX slog2简介
1.概述
slog2 是QNX系统提供的一套log机制,slog2info是管理slog的一个进程,可通过slog2info命令获取历史log。
2.slog API
(1)配置log
typedef struct
{int num_buffers; // log buffer集 中有多少个bufferconst char *buffer_set_name; // log buffer集的名称一般是进程名,slog2info -b 参数使用uint8_t verbosity_level;// 整个log buffer集中的最小verbosity_level,只有高于verbosity_level的log才会写入log buffer中slog2_buffer_config_t buffer_config[ SLOG2_MAX_BUFFERS ];uint32_t max_retries;
} slog2_buffer_set_config_t;
typedef struct
{const char *buffer_name; // slog2 buffer 名称int num_pages; // 用于定于log buffer的大小,一个page是4kB
} slog2_buffer_config_t;
(2)创建实例
int slog2_register( slog2_buffer_set_config_t *config, // buffer集的配置结构体slog2_buffer_t *handles, // 返回操作buffer的handle,后面打印log函数会用到uint32_t flags ); // 用于指定是否存放到flash中,方便热启时恢复
// 返回值:0 成功,-1 失败
(3)打印日志
vslog2f(nullptr, log_id_, match_level(level), fmt, args); // 按可变参数打印日志 具体用法可参考如下代码
三 slog封装类
wangzhicheng2013/qnx_slog2 (github.com)