ROS日志记录器禁用Python日志记录器。

6
我在使用Python logger和rospy logger时遇到了问题。一开始,当ROS节点被初始化后,Python logger就停止记录日志了。我尝试通过将一个流处理器(handler)添加到logger中来解决这个问题。现在只有在ROS节点被初始化后它才会记录日志。
我在ROS git中读到了关于rospy和python logging冲突的问题,但似乎没有一个好的解决方案可以让我的代码仅使用Python logger,独立于ROS logger。
某些模块初始化了logger:
    path = "/some_directory/"
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    logger = logging.getLogger('logger_name')

    # logging file handler for basic log infos
    file_handler_info = logging.FileHandler('{}log.log'.format(path))
    file_handler_info.setFormatter(formatter)
    file_handler_info.setLevel(logging.INFO)
    logger.addHandler(file_handler_info)

    # logging file handler for critical warnings
    file_handler_critical = logging.FileHandler('{}critical.log'.format(path))
    file_handler_critical.setFormatter(formatter)
    file_handler_critical.setLevel(logging.WARNING)
    logger.addHandler(file_handler_critical)

    # logging stream handler for console output
    stream_handler = logging.StreamHandler()
    stream_handler.setFormatter(formatter)
    stream_handler.setLevel(logging.DEBUG)
    logger.addHandler(stream_handler)

其他模块启动ROS节点

logger.info("This message will not be displayed")
rospy.init_node('node_name', anonymous=True)
logger.info("This message will be displayed")
1个回答

1

rospy提供了覆盖默认日志配置的功能:

默认情况下,rospy和其他ROS Python库使用$ROS_ROOT/../../etc/ros/python_logging.conf文件。该文件是Python日志模块使用的标准fileConfig格式(请参见https://docs.python.org/library/logging.config.html#configuration-file-format)。

您可以通过设置ROS_PYTHON_LOG_CONFIG_FILE环境变量来覆盖此配置文件的位置。

自定义或创建您自己的版本python_logging.conf,默认情况下将其放置在/opt/ros/YOUR_ROS_DISTRO/etc/ros/中。

也许只需将streamHandler添加到根记录器即可:

[logger_root]
level=DEBUG
handlers=fileHandler,streamHandler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接