Source code for pymodaq_utils.logger

# -*- coding: utf-8 -*-
"""
Created the 27/10/2022

@author: Sebastien Weber
"""
import logging
import warnings
from logging.handlers import TimedRotatingFileHandler
from pathlib import Path

from pymodaq_utils.config import get_set_config_dir, Config

config = Config()


[docs] def set_logger(logger_name, add_handler=False, base_logger=False, add_to_console=False, log_level=None, logger_base_name='pymodaq') -> logging.Logger: """defines a logger of a given name and eventually add an handler to it Parameters ---------- logger_name: (str) the name of the logger (usually it is the module name as returned by get_module_name add_handler (bool) if True adds a TimedRotatingFileHandler to the logger instance (should be True if logger set from main app base_logger: (bool) specify if this is the parent logger (usually where one defines the handler) Returns ------- logger: (logging.Logger) logger instance See Also -------- get_module_name, logging.handlers.TimedRotatingFileHandler """ if not base_logger: logger_name = f'{logger_base_name}.{logger_name}' logger = logging.getLogger(logger_name) if log_level is None: log_level = config('general', 'debug_level') logger.setLevel(log_level) if add_handler: try: log_path = get_set_config_dir('log', user=True) log_file_path = log_path.joinpath(f'{logger_base_name}.log') if not (log_file_path.exists() and log_file_path.is_file()): log_file_path.touch(mode=0o777) handler = TimedRotatingFileHandler(log_file_path, when='midnight') except Exception as e: print(e) print(f"Could not set up logger at {log_file_path}. Probably because of missing rights.") print("Falling back to console logging.") handler = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logging.captureWarnings(True) # only catch DeprecationWarning in DEBUG level if log_level == 'DEBUG': warnings.filterwarnings('default', category=DeprecationWarning) else: warnings.filterwarnings('ignore', category=DeprecationWarning) warnings_logger = logging.getLogger("py.warnings") warnings_logger.addHandler(handler) if add_to_console: console_handler = logging.StreamHandler() formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') console_handler.setFormatter(formatter) logger.addHandler(console_handler) return logger
[docs] def get_base_logger(logger: logging.Logger) -> logging.Logger: while logger.name != 'pymodaq': logger = logger.parent return logger
[docs] def get_module_name(module__file__path): """from the full path of a module extract its name""" path = Path(module__file__path) return path.stem