Logging System

Note

The CCSDSPy logging system is partially based on the Astropy logging system including some of the documentation shown here.

Overview

The CCSDSPy logging system makes use of the Python logger system and provides flexibility in deciding which messages to show, which to send them to a file and a way to capture them.

All messages from CCSDSPy are issued using the logger system and there are no direct print() calls or use of the warnings module. Messages can have one of several levels:

  • DEBUG: Detailed information, typically of interest only when diagnosing problems.

  • INFO: An message conveying information about the current task, and confirming that things are working as expected

  • WARNING: An indication that something unexpected happened, and that user action may be required.

By default, INFO and WARNING messages are displayed, and are sent to a log file located at ~/ccsdspy.log (if the file is writeable).

Configuring the logging system

The logging system can be configured using the configuration file as described in Using the configuration file below,

Context managers

In some cases, you may want to capture the log messages, for example to check whether a specific message was output, or to log the messages from a specific section of code to a separate file. Both of these are possible using context managers.

To add the log messages to a list, first import the logger if you have not already done so:

from ccsdspy import log

then enclose the code in which you want to log the messages to a list in a with statement:

with log.log_to_list() as log_list:
    # your code here

In the above example, once the block of code has executed, log_list will be a Python list containing all the CCSDSPy logging messages that were raised. Note that messages continue to be output as normal.

Similarly, you can output the log messages of a specific section of code to a file using:

with log.log_to_file('myfile.log'):
    # your code here

which will add all the messages to myfile.log (this is in addition to the overall log file mentioned in Using the configuration file).

While these context managers will include all the messages emitted by the logger (using the global level set by log.setLevel), it is possible to filter a subset of these using filter_level=, and specifying one of 'DEBUG', 'INFO', 'WARN', 'ERROR'. Note that if filter_level is a lower level than that set via setLevel, only messages with the level set by setLevel or higher will be included (i.e. filter_level is only filtering a subset of the messages normally emitted by the logger).

Using the configuration file

Options for the logger can be set in the [logger] section of the CCSDSPy configuration file. For more information on the configuration file, see Customization and Global Configuration.