0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread发布“超轻量级“日志组件ulog

RTThread物联网操作系统 来源:未知 作者:李倩 2018-11-02 09:45 次阅读

在介绍 ulog 前,我们先来了解一些日志的概念:

日志的定义:日志会将软件运行的状态、过程等信息,输出到不同的介质中(例如:文件、控制台、显示屏等),并进行显示和保存。为软件调试、维护过程中的问题提供追溯、性能分析、系统监控、故障预警等功能,同时提供参考依据。可以说,日志的使用,几乎占用了软件生命周期至少 80% 的时间。

日志的重要性:对于操作系统而言,由于其软件的复杂度非常大,单步调试在一些场景下并不适合,所以日志组件在操作系统上几乎都是标配。完善的日志系统也能让操作系统的调试事半功倍。

RT-Thread 一直缺少小巧、实用的日志组件,而 ulog 的诞生补全了这块的短板。今天,它将作为 RT-Thread 的基础组件被开源出来,让我们的开发者也能用上简洁易用的日志系统,提高开发效率。

ulog 介绍

ulog 是一个非常简洁、易用的 C/C++ 日志组件,第一个字母 u 代表 μ,即微型的意思。它能做到最低ROM<1K, RAM<0.2K的资源占用。ulog 不仅有小巧体积,同样也有非常全面的功能,其设计理念参考的是另外一款 C/C++ 开源日志库:EasyLogger(简称 elog),并在功能和性能等方面做了非常多的改进。主要特性如下:

主要特性

线程安全

日志输出被设计为是线程安全的方式,当前线程日志输出不会被其他线程打断干扰。不用再担心像使用 rt_kprintf 那样,多线程并发输出日志时,日志显示错位、截断等问题。

高可靠

日志系统可靠性高,在中断 ISR中、Hardfault等复杂环境下依旧可用。不仅留给用户的限制更少,还能够保证系统在出错场景下,记录的日志依旧准确、全面,成为用户的调试利器。而这点在其他常见的日志系统中是做不到的。

后端多样化

ulog 可以将日志输出到终端、串口、网络,文件、闪存等位置,这些地方在 ulog 里统称为后端。ulog 采用了前后端分离式设计,保证了日志的后端代码的独立性以及可扩展性。无论什么样的后端,只要实现出来,都可以注册上去。

当前 ulog 已经集成了两种后端:

console 控制台:即大家常用的 rt_kprintf 输出的位置;

Flash 存储:该后端已集成到 RT-Thread 的软件包中,具体位置如下:

未来还将会有更多的后端加入进来,也期待大家一起参与,实现你们需要的后端,然后分享出来。

支持异步输出

在 ulog 中,默认的输出模式是同步模式,在很多场景下用户可能还需要异步模式。用户在调用日志输出 API 时,会将日志缓存到缓冲区中,会有专门负责日志输出的线程取出日志,然后输出到后端。

这样日志输出不会阻塞当前线程,日志调试代码也就不会影响当前线程运行时序。

灵活的过滤配置

支持运行阶段/编译阶段开关控制全局的日志输出级别;

各模块的日志支持运行阶段/编译阶段设置输出级别;

日志内容支持按关键词及标签方式进行全局过滤;

以上运行阶段的配置也都支持通过 Finsh/MSH 命令进行操作。

兼容 syslog

ulog 提供了 syslog 模式的支持,不仅仅前端 API 与 syslog API 完全一致,日志的格式也符合 RFC 标准,更好的兼容了来自 linux 平台上的软件代码。

支持 hexdump

hexdump 也是日志输出时较为常用的功能,通过 hexdump 可以将一段数据以 hex 格式输出出来。大致效果如下:

支持浮点数打印

这个一直以来都是大家用 rt_kprintf 的痛点,现在在 ulog 上得到了彻底的解决。使用前,需要先在 menuconfig 中配置开启 ulog 的浮点数支持。

兼容 rtdbg.h 及 elog

rtdbg 是 RT-Thread 早期的日志头文件,当前 rtdbg 已完成无缝对接ulog ,开启 ulog 后,旧项目中使用 rtdbg 的代码无需做任何修改,即可使用 ulog 完成日志输出。

elog 是 EasyLogger 的简称,对于 elog 来说,ulog 能完全做到 API 层面的兼容。使用时,只需要将旧项目源代码中的 #include 更换为 #include 即可,其他代码无需再做任何改动。

使用流程

ulog 的代码目前开源在 RT-Thread 的 GitHub 仓库中,代码位于 rt-thread/components/utilities/ulog 下,大致使用流程如下:

开启:通过 ENV 工具,在 menuconfig 中的 utilities 菜单下选中 ulog 组件;

使用:可以参考 ulog 的应用笔记,ulog 的主要日志 API 非常简单,基本用法如下:

#define LOG_TAG "example" //定义当前文件的日志标签,不定义默认为:`NO_TAG`#define LOG_LVL LOG_LVL_DBG //定义当前文件的日志输出级别,不定义默认为:调试级别#include /* 使用 ulog API 输出日志 */LOG_D("this is a debug log!");LOG_I("this is a info log!");LOG_W("this is a warning log!");LOG_E("this is a error log!");

获取文档

RT-Thread 为 ulog 组件提供了两篇应用笔记,从由浅入深的角度帮助大家更好的使用该组件,文档如下:(以下链接请复制至外部浏览器打开)

《RT-Thread ulog 日志组件应用笔记 - 基础篇》:https://www.rt-thread.org/document/site/rtthread-application-note/debug/ulog/an0022-rtthread-debug-ulog-basic/

《RT-Thread ulog 日志组件应用笔记 - 进阶篇》:https://www.rt-thread.org/document/site/rtthread-application-note/debug/ulog/an0024-rtthread-debug-ulog-advance/

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 操作系统
    +关注

    关注

    37

    文章

    6280

    浏览量

    121869
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66736

原文标题:Debug神器 | RT-Thread发布“超轻量级“日志组件ulog

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    i.MX RT1170:VGLite移植RT-Thread Nano过程讲解(上)

    RT-Thread 是国人自主研发的开源实时操作系统(RTOS),RT-Thread Nano 是极简版的硬实时内核,内存占用小,移植简单。VGLite 是 NXP 提供的轻量级 2D 图形 API,基于 FreeRTOS 实现
    的头像 发表于 11-09 11:20 1229次阅读
    i.MX <b class='flag-5'>RT</b>1170:VGLite移植<b class='flag-5'>RT-Thread</b> Nano过程讲解(上)

    简洁易用的日志系统 ulog 日志

    操作系统上几乎都是标配。完善的日志系统也能让操作系统的调试事半功倍。ulog 的起源: RT-Thread 一直缺少小巧、实用的日志组件,而
    发表于 03-29 06:40

    如何更好地使用RT-Thread AT组件

    本文介绍了RT-Thread AT组件的基本知识和AT客户端的使用方法,帮助开发者更好地使用RT-Thread AT组件
    发表于 03-30 07:23

    如何使用RT-Thread AT组件

    文章目录前言硬件准备软件准备百问网STM32F103ESP8266 01SESP8266介绍ESP8266 01S 技术规格参数RT-Thread源码RT-Thread AT组件前言本文介绍
    发表于 12-10 06:14

    RT-Thread v4.1.0 正式发布了!

    ://github.com/RT-Thread/rt-thread/commit/52d0dc691cf49828d49f835f2289424402aca8f1组件组件部分对Beta
    发表于 04-14 14:00

    ulog_easyflash存满后去读取日志系统重启咋办

    MCU:stm32f407SPI flash:W25Q128IDE:rt-thread studio软件包:ulog_easyflash+easyflasheasyflash同时开启了ENV环境变量
    发表于 12-30 15:17

    不知道rt-threadulog为什么可以在中断中使用?

    初学rt-thread,有点疑问,不知道rt-threadulog为什么可以在中断中使用,ulog与fastlog的区别又在哪里呢感谢各位解答
    发表于 02-03 11:43

    RT-Thread NetUtils的使用方法

    泛使用的轻量级文件传输工具 TFTP,方便地通过网络完成两个设备间的文件互传。另外, RT-Thread 还针对开发中的实际问题,提供了一些高级的辅助工具,如可以远程登录到 RT-Thread Finsh/MSH Shell 的
    的头像 发表于 10-08 16:41 7625次阅读
    <b class='flag-5'>RT-Thread</b> NetUtils的使用方法

    RT-Thread 应用笔记 - RTC Alarm 组件的使用

    RT-Thread 应用笔记 - 不正确使用LOG也会引发hard faultRT-Thread 应用笔记 - RTC Alarm 组件的使用RT-Thread 应用笔记 - free
    发表于 01-25 18:18 10次下载
    <b class='flag-5'>RT-Thread</b> 应用笔记 - RTC Alarm <b class='flag-5'>组件</b>的使用

    RT-Thread学习笔记 RT-Thread的架构概述

    的种种优越之处。RT-Thread 是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过 16 个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富
    的头像 发表于 07-09 11:27 3989次阅读
    <b class='flag-5'>RT-Thread</b>学习笔记 <b class='flag-5'>RT-Thread</b>的架构概述

    RT-Thread文档_RT-Thread 简介

    RT-Thread文档_RT-Thread 简介
    发表于 02-22 18:22 5次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 简介

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 7次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植

    RT-Thread文档_FAL 组件

    RT-Thread文档_FAL 组件
    发表于 02-22 18:41 0次下载
    <b class='flag-5'>RT-Thread</b>文档_FAL <b class='flag-5'>组件</b>

    RT-Thread文档_ulog 日志

    RT-Thread文档_ulog 日志
    发表于 02-22 18:42 1次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>ulog</b> <b class='flag-5'>日志</b>

    RT-Thread v5.0.2 发布

    RT-Thread 代码仓库地址: ●  https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本
    的头像 发表于 10-10 18:45 773次阅读
    <b class='flag-5'>RT-Thread</b> v5.0.2 <b class='flag-5'>发布</b>