Source code for dqm.diversity.twe_logger

"""
The confiance_logger module provides a preconfigured logger for logging messages
with specified formatting and output control. It can log messages to the standard output,
to a specified file, or both.

Usage:
Import the module and get the default logger:
import twe_logger
logger = twe_logger.get_logger()

    If you need a logger with different parameters, call `get_logger` with the desired parameters:

        logger = twe_logger.get_logger(filename="my_logs.log")
        logger = twe_logger.get_logger(name="my_logger", level='debug',
        filename='my_logs.log', output="both")
    Then, use the logger within your code:

        logger.info("This is an info message")
        logger.error("This is an error message")
"""
import logging
import sys

LOGGER_DEFAULT_NAME = 'twe_logger'


[docs] def log_str_to_level(str_level): """ Converts a string to a corresponding logging level. Args: str_level (str): The logging level as a string. Returns: int: The corresponding logging level. """ if str_level == 'debug': level = logging.DEBUG elif str_level == 'info': level = logging.INFO elif str_level == 'warning': level = logging.WARNING elif str_level == 'error': level = logging.ERROR elif str_level == 'critical': level = logging.CRITICAL else: level = logging.NOTSET return level
[docs] def get_logger( name=LOGGER_DEFAULT_NAME, level='debug', filename=None, output=None ): """ Creates and returns a logger. Args: name (str, optional): The name of the logger. level (int or str, optional): The logging level. filename (str, optional): The name of the file where the logger should write. output (str, optional): Where should the logger write. Can be 'stdout', 'file', or 'both'. Returns: logging.Logger: The logger. """ if isinstance(level, str): level = log_str_to_level(level) # Decide the output based on whether a filename is provided and output is specified if output is None: output = 'file' if filename else 'stdout' logger = logging.getLogger(name) formatter = logging.Formatter('[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s \ - %(message)s', '%m-%d %H:%M:%S') handlers = [] if output in ['stdout', 'both']: # StreamHandler to send logs to stdout stream_handler = logging.StreamHandler(stream=sys.stdout) stream_handler.setFormatter(formatter) stream_handler.setLevel(level) handlers.append(stream_handler) if output in ['file', 'both'] and filename: # FileHandler to send logs to a file file_handler = logging.FileHandler(filename) file_handler.setFormatter(formatter) file_handler.setLevel(level) handlers.append(file_handler) if not logging.getLogger(name).hasHandlers(): for handler in handlers: logger.addHandler(handler) else: logger.handlers = handlers logger.setLevel(level) logger.info("Logger: %s, handlers: %s" , name,logger.handlers) return logger