Source code for topostats.logs.logs

"""Standardise logging."""
import sys
from pathlib import Path
from datetime import datetime
import logging

# pylint: disable=assignment-from-no-return

start = datetime.now()
LOG_INFO_FORMATTER = logging.Formatter(
    fmt="[%(asctime)s] [%(levelname)-8s] [%(name)s] %(message)s", datefmt="%a, %d %b %Y %H:%M:%S"
)
LOG_ERROR_FORMATTER = logging.Formatter(
    fmt="[%(asctime)s] [%(levelname)-8s] [%(name)s] [%(filename)s] [%(lineno)s] %(message)s",
    datefmt="%a, %d %b %Y %H:%M:%S",
)

LOGGER_NAME = "topostats"


[docs] def setup_logger(log_name: str = LOGGER_NAME) -> logging.Logger: """Logger setup. The logger for the module is initialised when the module is loaded (as this functions is called from __init__.py). This creates two stream handlers, one for general output and one for errors which are formatted differently (there is greater information in the error formatter). To use in modules import the 'LOGGER_NAME' and create a logger as shown in the Examples, it will inherit the formatting and direction of messages to the correct stream. Parameters ---------- log_name : str Name under which logging information occurs. Returns ------- logging.Logger Logger object. Examples -------- To use the logger in (sub-)modules have the following. import logging from topostats.logs.logs import LOGGER_NAME LOGGER = logging.getLogger(LOGGER_NAME) LOGGER.info('This is a log message.') """ out_stream_handler = logging.StreamHandler(sys.stdout) out_stream_handler.setLevel(logging.DEBUG) out_stream_handler.setFormatter(LOG_INFO_FORMATTER) err_stream_handler = logging.StreamHandler(sys.stderr) err_stream_handler.setLevel(logging.ERROR) err_stream_handler.setFormatter(LOG_ERROR_FORMATTER) file_handler = logging.FileHandler(Path().cwd().stem + f"-{start.strftime('%Y-%m-%d-%H-%M-%S')}.log") file_handler.setFormatter(LOG_ERROR_FORMATTER) logger = logging.getLogger(log_name) logger.setLevel(logging.INFO) logger.propagate = True if not logger.handlers: logger.addHandler(out_stream_handler) logger.addHandler(err_stream_handler) logger.addHandler(file_handler) return logger