Source code for calliope.core.util.logging

Copyright (C) since 2013 Calliope contributors listed in AUTHORS.
Licensed under the Apache 2.0 License (see LICENSE file).

Create the Calliope logger object and apply other logging tools/functionality


import datetime
import logging
import sys

_time_format = "%Y-%m-%d %H:%M:%S"

def setup_root_logger(verbosity, capture_warnings):
    root_logger = logging.getLogger()  # Get the root logger

    # Remove any existing output handlers from root logger
    if root_logger.hasHandlers():
        for handler in root_logger.handlers:

    # Create a console log handler with decent formatting and attach it
    formatter = logging.Formatter(
        "[%(asctime)s] %(levelname)-8s %(message)s", datefmt=_time_format
    console = logging.StreamHandler(stream=sys.stdout)

    if capture_warnings:
        pywarning_logger = logging.getLogger("py.warnings")

    return root_logger

[docs]def set_log_verbosity( verbosity="info", include_solver_output=True, capture_warnings=True ): """ Set the verbosity of logging and setup the root logger to log to console (stdout) with timestamp output formatting. Parameters ---------- verbosity : str, default 'info' Logging level to display across all of Calliope. Can be one of 'debug', 'info', 'warning', 'error', or 'critical'. include_solver_output : bool, default True If True, the logging level for just the backend model is set to DEBUG, which turns on display of solver output. capture_warnings : bool, default True If True, also capture all warnings and log them to the WARNING level. This results in more consistent output when running interactively. """ backend_logger = logging.getLogger("calliope.backend.pyomo.model") if include_solver_output is True: backend_logger.setLevel("DEBUG") else: backend_logger.setLevel(verbosity.upper()) setup_root_logger(verbosity=verbosity, capture_warnings=capture_warnings)
def log_time( logger, timings, identifier, comment=None, level="info", time_since_run_start=False ): if comment is None: comment = identifier timings[identifier] = now = if time_since_run_start and "run_start" in timings: time_diff = now - timings["run_start"] comment += ". Time since start of model run: {}".format(time_diff) getattr(logger, level)(comment) class LogWriter: def __init__(self, logger, level, strip=False): self.logger = logger self.level = level self.strip = strip def write(self, message): if message != "\n": if self.strip: message = message.strip() getattr(self.logger, self.level)(message) def flush(self): pass