diff --git a/common/src/aaredaqlib/logger_config.py b/common/src/aaredaqlib/logger_config.py index 5f3a22b7..7744eb48 100644 --- a/common/src/aaredaqlib/logger_config.py +++ b/common/src/aaredaqlib/logger_config.py @@ -3,7 +3,24 @@ import logging.config import yaml import os -def setup_logger(name="aaredaq", base_dir: str | None = None): +from PySide6.QtCore import QObject, Signal + +class QtLogEmitter(QObject): + message = Signal(str) + +class QtLogHandler(logging.Handler): + def __init__(self, emitter: QtLogEmitter): + super().__init__() + self.emitter = emitter + + def emit(self, record: logging.LogRecord): + try: + msg = self.format(record) + self.emitter.message.emit(msg) + except Exception: + self.handleError(record) + +def setup_logger(name="aaredaq", base_dir: str | None = '/tmp/mxlogs'): # switch to production mode using: $ APP_ENV=prod python main.py env = os.getenv("APP_ENV", "dev") # default: dev config_file = ( @@ -41,4 +58,27 @@ def setup_logger(name="aaredaq", base_dir: str | None = None): logging.getLogger("redis_lock").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING) + logging.getLogger("matplotlib.font_manager").setLevel(logging.WARNING) + logging.getLogger("aaredaq").setLevel(logging.DEBUG) # DAQ + logging.getLogger("aaregui").setLevel(logging.INFO) return logging.getLogger(name) + +def find_existing_formatter(default_fmt="%(asctime)s [%(levelname)s] %(name)s: %(message)s", default_datefmt=None): + root = logging.getLogger() + for h in root.handlers: + if h.formatter: + return h.formatter + + for logger_name, logger in logging.Logger.manager.loggerDict.items(): + if isinstance(logger, logging.Logger): + for h in logger.handlers: + if h.formatter: + return h.formatter + + return logging.Formatter(default_fmt, datefmt=default_datefmt) + +def attach_to_logger(logger_name: str = "", handler: logging.Handler = None): + logging.getLogger(logger_name).addHandler(handler) + + +