Skip to content

Instantly share code, notes, and snippets.

@nzjrs
Created January 30, 2014 16:06
Show Gist options
  • Save nzjrs/8712011 to your computer and use it in GitHub Desktop.
Save nzjrs/8712011 to your computer and use it in GitHub Desktop.
Reconnect python logging calls with the ROS logging system
class ConnectPythonLoggingToROS(logging.Handler):
MAP = {
logging.DEBUG:rospy.logdebug,
logging.INFO:rospy.loginfo,
logging.WARNING:rospy.logwarn,
logging.ERROR:rospy.logerr,
logging.CRITICAL:rospy.logfatal
}
def emit(self, record):
try:
self.MAP[record.levelno]("%s: %s" % (record.name, record.msg))
except KeyError:
rospy.logerr("unknown log level %s LOG: %s: %s" % (record.levelno, record.name, record.msg))
#reconnect logging calls which are children of this to the ros log system
logging.getLogger('trigger').addHandler(ConnectPythonLoggingToROS())
#logs sent to children of trigger with a level >= this will be redirected to ROS
logging.getLogger('trigger').setLevel(logging.DEBUG)
rospy.init_node('triggerbox_host', log_level=rospy.DEBUG)
@dogoepp
Copy link

dogoepp commented Sep 1, 2016

Thanks a lot for this snippet ! It's perfect :)

@BoltzmannBrain
Copy link

This is cool, thanks for posting! Do you have this in the context of an example though? I have a few specific questions:

a. Do you still call rospy.loginfo("my message") in your code, or do you use the Python logger (below)?

import logging
LOG = logging.getlogger(__name__)
LOG.info("my message")

b. Is there a way you can have this defined once in the repo such that each module can just import MyCoolLogger and use it generically?

Basically I'm looking to implement a custom logger that invokes rospy logging in the ROS pieces of my codebase, but uses the Python system logger elsewhere.

@felixdivo
Copy link

I use

self.MAP[record.levelno]("%s: %s" % (record.name, record.getMessage()))

instead of

self.MAP[record.levelno]("%s: %s" % (record.name, record.msg))

to have access to parameters in logging calls.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment