У меня есть кодовая база кода 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]