Source code for jade.loggers

"""Contains logging configuration data."""

import logging
import logging.config

from jade.extensions.registry import Registry


[docs] def setup_logging( name, filename, console_level=logging.INFO, file_level=logging.INFO, mode="w", packages=None ): """Configures logging to file and console. Parameters ---------- name : str logger name filename : str | None log filename console_level : int, optional console log level file_level : int, optional file log level packages : list, optional enable logging for these package names """ log_config = { "version": 1, "disable_existing_loggers": False, "formatters": { "short": { "format": "%(asctime)s - %(levelname)s [%(name)s " "%(filename)s:%(lineno)d] : %(message)s", }, "detailed": { "format": "%(asctime)s - %(levelname)s [%(name)s " "%(filename)s:%(lineno)d] : %(message)s", }, }, "handlers": { "console": { "level": console_level, "formatter": "short", "class": "logging.StreamHandler", }, "file": { "class": "logging.FileHandler", "level": file_level, "filename": filename, "mode": mode, "formatter": "detailed", }, }, "loggers": { name: {"handlers": ["console", "file"], "level": "DEBUG", "propagate": False}, }, } logging_packages = set(Registry().list_loggers()) if packages is not None: for package in packages: logging_packages.add(package) for package in logging_packages: log_config["loggers"][package] = { "handlers": ["console", "file"], "level": "DEBUG", "propagate": False, } if filename is None: log_config["handlers"].pop("file") log_config["loggers"][name]["handlers"].remove("file") for package in logging_packages: if "file" in log_config["loggers"][package]["handlers"]: log_config["loggers"][package]["handlers"].remove("file") logging.config.dictConfig(log_config) logger = logging.getLogger(name) return logger
_EVENT_LOGGER_NAME = "_jade_event"
[docs] def setup_event_logging(filename, mode="w"): """Configures structured event logging. Parameters ---------- filename : str log filename mode : str """ log_config = { "version": 1, "disable_existing_loggers": False, "formatters": { "basic": {"format": "%(message)s"}, }, "handlers": { "file": { "class": "logging.FileHandler", "level": logging.INFO, "filename": filename, "mode": mode, "formatter": "basic", }, }, "loggers": { "_jade_event": { "handlers": ["file"], "level": "INFO", "propagate": False, }, }, } logging.config.dictConfig(log_config) logger = logging.getLogger(_EVENT_LOGGER_NAME) return logger
[docs] def close_event_logging(): """Close the event log file handle.""" for handler in logging.getLogger(_EVENT_LOGGER_NAME).handlers: handler.close()
[docs] def log_event(event): """ Log a structured job event into log file Parameters ---------- event: :obj:`StructuredLogEvent` An instance of :obj:`StructuredLogEvent` """ logger = logging.getLogger(_EVENT_LOGGER_NAME) logger.info(event)