The*_*hin 6 python logging ros rospy python-logging
我在使用 Python 记录器和 rospy 记录器时遇到问题。一开始,ROS 节点初始化后,Python 记录器就停止记录。我尝试通过向记录器添加流处理程序来解决该问题。现在,它仅记录 ROS 节点是否已初始化。
我在ROS git中读到了有关 rospy 和 python 日志记录冲突的信息,但似乎没有很好的解决方案可以专门使用 python 记录器,并且独立于 ROS 记录器来处理我的代码。
一些模块初始化记录器:
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)
Run Code Online (Sandbox Code Playgroud)
启动 ROS 节点的其他模块
logger.info("This message will not be displayed")
rospy.init_node('node_name', anonymous=True)
logger.info("This message will be displayed")
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)