首页 / 日志 / 使用Python,ROS和C进行日志记录
使用Python,ROS和C进行日志记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python,ROS和C进行日志记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2470字,纯文字阅读大概需要4分钟。
内容图文
![使用Python,ROS和C进行日志记录](/upload/InfoBanner/zyjiaocheng/718/372482fe53584fb59f021984b771f9f2.jpg)
我有一个Python和C代码的代码库,包括大量使用ROS.使用system logger和rospy logging在整个Python代码中完成日志记录 – 设计示例:
import logging
import rospy
logging.basicConfig(level=logging.INFO)
LOG = logging.getLogger(__name__)
def run():
rospy.loginfo("This is a ROS log message")
LOG.info("And now from Python")
if __name__ == '__main__':
runt()
至于C代码,我们需要添加日志记录,可能是glog,但我对其他选项持开放态度.
有没有办法将各种记录器集成到一个模块中?理想情况下,用户可以执行类似my_logger = AwesomeLogger(level =’info’,output =’my_logs.txt’)的操作,然后在后台使用AwesomeLogger设置Python和C记录器,并将所有日志输出(包括来自ROS)合并到干净的控制台消息输出文本文件
注意我们的目标是支持ubuntu 16.04,ROS-kinetic,C 11,Python 2.7 *
*如果一个解决方案提供合理的移动到Python 3.6你获得奖励积分!
UPDATE
如果我从yaml加载dict配置(如this post on logging best practices中所述,我可以为ROS指定处理程序和记录器.但是使用下面的yaml我得到重复的rospy日志消息到控制台,一个是标准的rospy日志格式,另一个是我指定的格式.为什么?
version: 1
disable_existing_loggers: True
formatters:
my_std:
format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
datefmt: "%Y/%m/%d %H:%M:%S"
handlers:
console:
class: logging.StreamHandler
formatter: my_std
level: DEBUG
stream: ext://sys.stdout
info_file_handler:
class: logging.handlers.RotatingFileHandler
level: INFO
formatter: my_std
filename: info.log
maxBytes: 10485760 # 10MB
backupCount: 20
encoding: utf8
rosconsole:
class: rosgraph.roslogging.RosStreamHandler
level: DEBUG
formatter: my_std
colorize: True
loggers:
my_module:
level: INFO
handlers: [console]
propagate: no
rosout:
level: INFO
handlers: [rosconsole]
propagate: yes
qualname: rosout
root:
level: INFO
handlers: [console, info_file_handler, rosconsole]
解决方法:
这个配置yaml可以解决这个问题:
version: 1
disable_existing_loggers: True
formatters:
my_std:
format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
datefmt: "%Y/%m/%d %H:%M:%S"
handlers:
console:
class: logging.StreamHandler
formatter: my_std
level: DEBUG
stream: ext://sys.stdout
info_file_handler:
class: logging.handlers.RotatingFileHandler
level: INFO
formatter: my_std
filename: info.log
maxBytes: 10485760 # 10MB
backupCount: 20
encoding: utf8
loggers:
__main__:
level: DEBUG
handlers: [console]
propagate: no
rosout:
level: INFO
propagate: yes
qualname: rosout
root:
level: INFO
handlers: [console, info_file_handler]
加载它,
import logging
import yaml
if os.path.exists(config_path):
with open(config_path, 'rt') as f:
config = yaml.safe_load(f.read())
logging.config.dictConfig(config)
内容总结
以上是互联网集市为您收集整理的使用Python,ROS和C进行日志记录全部内容,希望文章能够帮你解决使用Python,ROS和C进行日志记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。