Регистрация с Python, ROS и C ++ - PullRequest
0 голосов
/ 09 июня 2018

У меня есть кодовая база кода Python и C ++, включая интенсивное использование ROS.Регистрация ведется по всему коду Python с помощью системного регистратора и rospy logging - надуманный пример:

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-кинетика, C ++ 11, Python 2.7 *

* Если решение предоставляет рациональное решение для перехода на Python 3.6, вы получаете бонусные баллы!

ОБНОВЛЕНИЕ Если язагрузить dict config из yaml (как описано в этом посте о лучших рекомендациях по протоколированию Я могу указать обработчики и регистраторы для 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]

Ответы [ 2 ]

0 голосов
/ 12 июля 2018

Этот конфиг 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)
0 голосов
/ 03 июля 2018

Вы можете использовать rospy.loginfo() для ROS-Python и ROS_INFO() для ROS-C ++ и интегрировать их в сцену.Для этого выполните следующие действия:

$ roscd log

Вы увидите несколько .log файлов, а затем используйте следующую команду для их отслеживания.

$ tail -f <logfile-name.log>

[ ОБНОВЛЕНИЕ ]
Также вы можете подписаться на тему /rosout или повторить эту тему ($ rostopic echo /rosout).
Ссылка .


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...