Deoxys Logger#

Have you struggled with adding print message while debugging and need to delete them one line after another when you finish debugging? Logging is a simple and effective tool to manage different types of messages. In this repo, we support loggign both for python end and C++ end.

Logger for python programs#

Remember to import!

For using all the following functions, make sure you did

from deoxys.utils import log_utils

For the python programs, we have three loggers defined by default: Deoxys, deoxys_examples, project. Deoxys logger records information from the controller codebase implementation, deoxys_examples logger records information for example scripts we provide, and project is a default logger we defined for your own project. All three loggers are streamed to console by default. To change this default behavior, you can change the level in deoxys_default_logger.yml, or you can create your own configuration file and specify it through the function get_deoxys_logger().

Logger Deoxys#

Mainly you need to watch out for the warning and error messages from this logger.

Logger deoxys_examples#

This is mainly for giving people an example of how to do logging in this codebase. We use this logger in the example scripts to differentiate logging messages from Deoxys logger.

Logger project#

We also have a default logger setting for your own project codebase.

If you specify project_name when calling the get_project_logger function, a logger with the name of project_name will be initialized, and its configuration is the same as the default project logger

Logger for C++ programs#

Logging in c++ part of codebase is based on spdlog. Our implementation of logging in the C++ codebase is minimal. We implemented two sinks, one for console and one for file logging. We use async logger to bypass the read/write blocking of logging. The implementation can be found here.

We specify two different loggers for the arm control process and the gripper control process. All the logging configurations are specified in our example robot config file charmander.yml. You can create your own config under the name of your machine and tune the parameters.

Logger arm_logger#

The logger arm_logger logs all the messages we consider important to show for arm control.

The logger arm_logger streams info level messages to the console. You can change the level in the config file here.

The logger arm_logger logs all messages whose levels are above debug into the file logs. You can change the level in the config file here.

Logger gripper_logger#

The logger gripper_logger logs all the messages we consider important to show for gripper control.

The logger gripper_logger streams info level messages to the console. You can change the level in the config file here.

The logger gripper_logger logs all messages whose levels are above debug into the file logs. You can change the level in the config file here.

Here is a quick overview of logging levels and their corresponding messages in our codebase:

Logger level Message contents
error Missing config files, franka exceptions
warning No valid controller is specified in the received message
info (console default) Initiailization info, gripper information
debug (file log default) Control callback information