ROS2官方教程:日志与日志记录器配置

本文翻译自ROS2官方教程,详细介绍了ROS2中的日志功能,包括日志记录器的概念、使用、配置方法,如命令行配置默认严重性级别和可编程配置独立的日志记录器。日志记录器支持多种过滤器和日志级别,并能与节点关联。同时,文章探讨了如何在C++和Python中使用日志以及配置终端输出格式。
摘要由CSDN通过智能技术生成

这是我对ROS官方ROS2教程的翻译,纯个人理解,对于文中的关键词汇或不确定的语句标注了原文,如有错误或翻译问题还请指出。
文章翻译并未按照逐句逐词的方式进行,而是加入了我的一些主观思考,不过原则上还是会以原文思路为主。
原文:https://index.ros.org/doc/ros2/Concepts/Logging/

日志与日志记录器配置

概述

当前支持日志功能的有:

  • 客户端程序库(rclcpprclpy)使用一个通用的日志库来提供:
    • 各种过滤器的日志调用
    • 日志级别
    • 与节点相关联的日志,可以自动的使用节点的名称和命名空间
  • 终端输出
    • 即将发布文件输出以及类似于rosout的的远程应用消息的功能
  • 多级别的可编程配置
    • 支持启动配置时的默认日志级别;即将发布运行时的配置文件和外部配置

日志记录器概念

日志消息是具有与DEBUG,INFO,ERROR,FATAL这些严重性级别相关的一些消息,这些严重性级别的严重性是升序排序的。

一个日志记录器只会处理高于指定选择的日志级别的日志消息。

每一个rclcpprclpy的节点具有一个与其相关的日志记录器,可以自动的使用节点的名称和命名空间。如果节点的名称被外部重映射为与源代码中定义的名称不同的其他名称,它将会在日志记录器名称中反映出来。没有所属节点的日志记录器也可以被创建,名字可以特殊指定。

日志记录器的名称能够表示层级关系,如果一个名为"abc.def"的日志记录器未设置严重性级别,则它将与它的父级日志记录器"abc"的级别一致,如果它的父级日志记录器的级别也没有设置,那么将会使用默认的日志记录器级别。当日志记录器"abc"的级别被改变时,所有它的子级日志记录器(比如"abc.def"或"abc.ghi.jkl")将受到影响,除非这些子级日志记录器的级别被明确设置过。

日志的使用

在C++中:

在Python中:

日志记录器的配置

命令行模式下配置默认严重性级别

在ROS2的Bouncy版本中,日志记录器默认的严重性级别可以在命令行中配置,比如:

ros2 run demo_nodes_cpp listener__log_level:=debug

其中日志的名称不需要刻意关注。

这样的配置将会影响所有未明确配置一个特定的严重性级别的日志记录器。

即将发布针对特定日志记录器进行配置的命令行配置功能。

可编程配置独立的日志记录器

日志记录器也可以在开发代码中进行配置。现在,可以在代码中对独立的日志记录器严重性级别进行配置,比如:

在C++中:

rcutils_logging_set_logger_level("logger_name", RCUTILS_LOG_SEVERITY_DEBUG);

在Python中:

logger.set_level(rclpy.logging.LoggingSeverity.DEBUG)
rclpy.logging.set_logger_level('logger_name', rclpy.logging.LoggingSeverity.DEBUG)

日志记录器示例程序中提供了一个手动公开一个服务的示例,以便可以在外部配置日志记录器;

将来我们希望能够实现运行时配置日志记录器的能力,从而可以自动公开服务。

终端输出配置

默认情况下,终端输出的格式包含消息的严重性级别、日志记录器的名称以及日志消息。诸如文件名称、函数名称以及行号等日志信息也同样可以显示。自定义终端输出格式可以通过配置RCUTILS_CONSOLE_OUTPUT_FORMAT环境变量来实现:详情可查看rcutils文档。由于rclcpprclpy均使用rcutils进行日志记录,这将影响所有的C++和Python节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值