astro py:docs

- Index
- Modules

### Navigation

- next »
- « previous |
- Astropy v5.2.1 »
- Logging system

# Logging system

Note

The Astropy logging system is meant for internal `astropy` usage. For use in other packages, we recommend implementing your own logger instead.

## Overview

The Astropy logging system is designed to give users flexibility in deciding which log messages to show, to capture them, and to send them to a file.

All messages printed by Astropy routines should use the built-in logging facility (normal `print()` calls should only be done by routines that are explicitly requested to print output). 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.

- ERROR: indicates a more serious issue, including exceptions

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

## Configuring the logging system

First, import the logger:

    from astropy import log

The threshold level (defined above) for messages can be set with e.g.:

    log.setLevel('DEBUG')

Color (enabled by default) can be disabled with:

    log.disable_color()

and enabled with:

    log.enable_color()

Warnings from `warnings.warn` can be logged with:

    log.enable_warnings_logging()

which can be disabled with:

    log.disable_warnings_logging()

and exceptions can be included in the log with:

    log.enable_exception_logging()

which can be disabled with:

    log.disable_exception_logging()

It is also possible to set these settings from the Astropy configuration file, which also allows an overall log file to be specified. See Using the configuration file for more information.

## 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 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 astropy 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 Astropy 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).

Similarly, it is possible to filter a subset of the messages by origin by specifying `filter_origin=` followed by a string. If the origin of a message starts with that string, the message will be included in the context manager. For example, `filter_origin='astropy.wcs'` will include only messages emitted in the `astropy.wcs` sub-package.

## Using the configuration file

Options for the logger can be set in the `[logger]` section of the Astropy configuration file:

    [logger]

    # Threshold for the logging messages. Logging messages that are less severe
    # than this level will be ignored. The levels are 'DEBUG', 'INFO', 'WARNING',
    # 'ERROR'
    log_level = 'INFO'

    # Whether to use color for the level names
    use_color = True

    # Whether to log warnings.warn calls
    log_warnings = False

    # Whether to log exceptions before raising them
    log_exceptions = False

    # Whether to always log messages to a log file
    log_to_file = True

    # The file to log messages to. If empty string is given, it defaults to a
    # file `astropy.log` in the astropy config directory.
    log_file_path = '~/.astropy/astropy.log'

    # Threshold for logging messages to log_file_path
    log_file_level = 'INFO'

    # Format for log file entries
    log_file_format = '%(asctime)s, %(origin)s, %(levelname)s, %(message)s'

    # The encoding (e.g., UTF-8) to use for the log file.  If empty string is
    # given, it defaults to the platform-preferred encoding.
    log_file_encoding = ""

## Reference/API

### astropy.logger Module

This module defines a logging class based on the built-in logging module.

Note

This module is meant for internal `astropy` usage. For use in other packages, we recommend implementing your own logger instead.

#### Classes

`Conf`() | Configuration parameters for `astropy.logger`.
`AstropyLogger`(name[, level]) | This class is used to set up the Astropy logging.
`LoggingError` | This exception is for various errors that occur in the astropy logger, typically when activating or deactivating logger-related features.