RT-Thread-ulog输出到flash-基于FlashDB

本文介绍如何利用ULOG_TSDB将日志数据存储到Flash中,包括后端设备初始化、追加、查询和清除日志数据等功能,并提供MSH命令实现日志查询和清除。

ULOG_TSDB搭建详解

一、依赖

1、打开FAL,挂载好片内/片外Flash,设置分区表

2、打开FlashDB、ulog组件

3、使能硬件RTC

二、实现

1、后端设备初始化

主要实现原理:把tsdb作为ulog输出的后端设备,实现保存日志数据到flash中

仿照console_be.c文件实现tsdb_be.c,参考官方文档ulog日志-日志后端

console_be.c是实现把控制台作为后端设备输出ulog数据

主要需要实现ulog_tsdb_backend_init函数和ulog_tsdb_backend_output函数,再通过INIT_ENV_EXPORT导出命令在系统初始化时执行

tsdb_be.c实现如下👇

#include <rthw.h>
#include <ulog.h>

//需要先在rtconfig.h中定义该宏
#ifdef ULOG_BACKEND_USING_TSDB

#if defined(ULOG_ASYNC_OUTPUT_BY_THREAD) && ULOG_ASYNC_OUTPUT_THREAD_STACK < 384
#error "The thread stack size must more than 384 when using async output by thread (ULOG_ASYNC_OUTPUT_BY_THREAD)"
#endif

extern int ulog_tsdb_init(void );
extern void ulog_tsdb_append(const char *str,size_t len);

static struct ulog_backend tsdb;

void ulog_tsdb_backend_output(struct ulog_backend *backend, rt_uint32_t level, const char *tag, rt_bool_t is_raw,
        const char *log, size_t len)
{
   
   
		ulog_tsdb_append(log,len);		
}

int ulog_tsdb_backend_init(void)
{
   
   
    ulog_init();
    tsdb.output = ulog_tsdb_backend_output;
    ulog_tsdb_init();
    ulog_backend_register(&tsdb, "tsdb", RT_TRUE);

    return 0;
}
INIT_ENV_EXPORT(ulog_tsdb_backend_init);

#endif /* ULOG_BACKEND_USING_TSDB */

2、TSDB功能实现

主要实现初始化、追加、查询(全部/日期区间)、清除功能,并把查询、清除功能导出到MSH命令中

①tsdb初始化
//在tsdb_be.c的后端设备初始化时调用
int ulog_tsdb_init(fdb_tsdb_t tsdb);
//该函数主要调用官方API👇
//参数意义:TSDB结构体、TSDB分区名称、挂载分区名称、时间戳回调函数、用户自定义数据
fdb_tsdb_init(&_global_tsdb, "
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值