Source code for xrprimer.utils.log_utils

import logging
from typing import Union

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')


[docs]def setup_logger(logger_name: str = 'root', file_level: int = logging.INFO, console_level: int = logging.INFO, logger_level: Union[int, None] = None, logger_path: str = None, logger_format: str = None) -> logging.Logger: """Set up a logger. Args: logger_name (str, optional): Name of the logger. Defaults to 'root'. file_level (int, optional): Set the logging level of file stream. Defaults to logging.INFO. console_level (int, optional): Set the logging level of console stream. Defaults to logging.INFO. logger_level (Union[int, None], optional): Set the logging level of this logger, level of every stream will be overwritten if logger_level is set. This argument has been deprecated. Defaults to None. logger_path (str, optional): Path to the log file. Defaults to None, no file will be written, StreamHandler will be used. logger_format (str, optional): The formatter for logger handler. Defaults to None. Returns: logging.Logger: A logger with settings above. """ logger = logging.getLogger(logger_name) level_candidates = [file_level, console_level] if logger_level is not None: level_candidates = [ logger_level, ] console_level = logger_level file_level = logger_level min_level = min(level_candidates) logger.setLevel(level=min_level) # prevent logging twice in stdout logger.propagate = False stream_handler = logging.StreamHandler() stream_handler.setLevel(console_level) handlers = [stream_handler] if logger_path is not None: handler = logging.FileHandler(logger_path) handler.setLevel(file_level) handlers.append(handler) if logger_format is not None: formatter = logging.Formatter(logger_format) else: formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') # assure handlers are not double while logger.hasHandlers(): logger.removeHandler(logger.handlers[0]) for handler in handlers: handler.setFormatter(formatter) logger.addHandler(handler) if logger_level is not None: logger.warning('UserWarning: logger_level is now deprecated, ' + 'please specify file_level/console_level instead.') return logger
[docs]def get_logger( logger: Union[None, str, logging.Logger] = None) -> logging.Logger: """Get logger. Args: logger (Union[None, str, logging.Logger]): None for root logger. Besides, pass name of the logger or the logger itself. Defaults to None. Returns: logging.Logger """ if logger is None or isinstance(logger, str): ret_logger = logging.getLogger(logger) else: ret_logger = logger return ret_logger