Skip to content

logging-exc-info (G201)#

Derived from the flake8-logging-format linter.

What it does#

Checks for uses of logging.error that pass exc_info=True.

Why is this bad?#

Calling logging.error with exc_info=True is equivalent to calling logging.exception. Using logging.exception is more concise, more readable, and conveys the intent of the logging statement more clearly.

Known problems#

This rule detects uses of the logging module via a heuristic. Specifically, it matches against:

  • Uses of the logging module itself (e.g., import logging; logging.info(...)).
  • Uses of flask.current_app.logger (e.g., from flask import current_app; current_app.logger.info(...)).
  • Objects whose name starts with log or ends with logger or logging, when used in the same file in which they are defined (e.g., logger = logging.getLogger(); logger.info(...)).
  • Imported objects marked as loggers via the lint.logger-objects setting, which can be used to enforce these rules against shared logger objects (e.g., from module import logger; logger.info(...), when lint.logger-objects is set to ["module.logger"]).

Example#

import logging

try:
    ...
except ValueError:
    logging.error("Exception occurred", exc_info=True)

Use instead:

import logging

try:
    ...
except ValueError:
    logging.exception("Exception occurred")

Options#

References#