Source code for tessif.logging

"""Tessif's logging specifications."""

import logging
from logging.handlers import TimedRotatingFileHandler

from tessif.frused.configurations import general_logging_level, maximum_number_of_logs
from tessif.frused.paths import logging_file


[docs]def create_file_handler(): """Create a tessif style logging file handler.""" # Define a file handler to write log messages to a file file_handler = TimedRotatingFileHandler( logging_file, when="D", # seperate log for each day backupCount=maximum_number_of_logs, # number of files logged delay=True, ) file_handler.setLevel(logging.DEBUG) # file_handler.doRollover() file_formatter = logging.Formatter( "[{asctime} {levelname} - {filename} ln:{lineno}]: {message}", style="{", datefmt="%Y-%m-%d %H:%M:%S", ) file_handler.setFormatter(file_formatter) return file_handler
[docs]def create_stream_handler(): """Create a (currently unused) tessif style logging stream handler.""" # Define a stream handler to write log messages to the console stream_handler = logging.StreamHandler() stream_handler.setLevel(getattr(logging, general_logging_level.upper())) stream_formatter = logging.Formatter( "[{levelname}]: {message}", # "[{levelname} - {filename} ln:{lineno}]: {message}", style="{", datefmt="%Y-%m-%d %H:%M:%S", ) stream_handler.setFormatter(stream_formatter) return stream_handler
[docs]def create_logger(name): """Create a tessif-style logger.""" logger = logging.getLogger(name) logger.setLevel(logging.INFO) reset_basic_config() # Add the handlers to the logger logger.addHandler(create_file_handler()) # logger.addHandler(create_stream_handler()) return logger
[docs]def reset_stream_handler(logger): """Reset a loggers stream handler. Usefull when tropping using tessif.system_model.tropp. Parameters ---------- logger: Logger of which the stream handler is to be reset """ for handler in logger.handlers: if isinstance(handler, logging.StreamHandler): logger.removeHandler(handler) logger.addHandler(create_stream_handler()) return logger
[docs]def reset_basic_config(): """Reset the logging modules basic configuration. Particularly useful when third party modules overwrite basic config. """ logging.basicConfig( format="[{levelname}]: {message}", style="{", level=logging.WARNING, force=True, )