Source code for aiida.cmdline.utils.log

"""Utilities for logging in the command line interface context."""
import logging

import click

from .echo import COLORS


[docs] class CliHandler(logging.Handler): """Handler for writing to the console using click."""
[docs] def emit(self, record): """Emit log record via click. Can make use of special attributes 'nl' (whether to add newline) and 'err' (whether to print to stderr), which can be set via the 'extra' dictionary parameter of the logging methods. """ try: nl = record.nl except AttributeError: nl = True try: err = record.err except AttributeError: err = False try: prefix = record.prefix except AttributeError: prefix = True record.prefix = prefix try: msg = self.format(record) click.echo(msg, err=err, nl=nl) except Exception: self.handleError(record)
[docs] class CliFormatter(logging.Formatter): """Formatter that automatically prefixes log messages with a colored version of the log level."""
[docs] def format(self, record): """Format the record using the style required for the command line interface.""" try: fg = COLORS[record.levelname.lower()] except KeyError: fg = 'white' try: prefix = record.prefix except AttributeError: prefix = None formatted = super().format(record) if prefix: return f'{click.style(record.levelname.capitalize(), fg=fg, bold=True)}: {formatted}' return formatted