From 1a64ea3a096c8d2936afcaa8a306954a12d537f0 Mon Sep 17 00:00:00 2001 From: David Perl Date: Fri, 14 Aug 2026 10:45:31 +0200 Subject: [PATCH 1/3] fix: remove duplicate handler in dev logging config --- src/aarecommon/config/logging_configs/logging_dev.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/aarecommon/config/logging_configs/logging_dev.yaml b/src/aarecommon/config/logging_configs/logging_dev.yaml index 571696b..5ec04e3 100644 --- a/src/aarecommon/config/logging_configs/logging_dev.yaml +++ b/src/aarecommon/config/logging_configs/logging_dev.yaml @@ -37,9 +37,9 @@ loggers: propagate: yes aareGUI: level: DEBUG - handlers: [ console, app_file, error_file ] + handlers: [console, app_file, error_file] propagate: yes root: level: DEBUG - handlers: [console] \ No newline at end of file + handlers: [] -- 2.54.0 From be5e971ff449ee3dbecdeb289422463e3e83c77f Mon Sep 17 00:00:00 2001 From: David Perl Date: Fri, 14 Aug 2026 11:31:44 +0200 Subject: [PATCH 2/3] fix: simplify log setup --- src/aarecommon/config/logger.py | 38 ++++++---------- src/aarecommon/config/logging.yaml | 32 +++++++++++++ .../config/logging_configs/logging_dev.yaml | 45 ------------------- .../config/logging_configs/logging_prod.yaml | 39 ---------------- 4 files changed, 45 insertions(+), 109 deletions(-) create mode 100644 src/aarecommon/config/logging.yaml delete mode 100644 src/aarecommon/config/logging_configs/logging_dev.yaml delete mode 100644 src/aarecommon/config/logging_configs/logging_prod.yaml diff --git a/src/aarecommon/config/logger.py b/src/aarecommon/config/logger.py index 64654e7..3678083 100644 --- a/src/aarecommon/config/logger.py +++ b/src/aarecommon/config/logger.py @@ -69,34 +69,26 @@ def get_uvicorn_logging_config() -> dict: } -def get_config_path(env: str = "dev") -> Path: - module_dir = Path(__file__).parent - config_filename = f"logging_{env}.yaml" - config_path = module_dir / "logging_configs" / config_filename - +def get_log_config() -> dict: + config_path = Path(__file__).parent / "logging.yaml" if not config_path.exists(): raise FileNotFoundError(f"Logging config not found: {config_path}") - - return config_path + with open(config_path, "r") as f: + return yaml.safe_load(f.read()) -# TODO fix logging. -def setup_logger( - name="aareDAQ", base_dir: str | None = "~/tmp/mxlogs/", config_path: str | None = None -): - # switch to production mode using: $ APP_ENV=prod python main.py - env = os.getenv("APP_ENV", "dev") # default: dev +_SETUP_DONE: bool = False - if config_path is None: - config_file = get_config_path(env) - else: - config_file = Path(config_path) - with open(config_file, "r") as f: - config = yaml.safe_load(f.read()) +def setup_logger(name: str, base_dir: str = "~/tmp/mxlogs/"): + global _SETUP_DONE + if _SETUP_DONE: + return logging.getLogger(name) + + config = get_log_config() # Force base directory to be under the user's home dir - effective_base = base_dir + f"{name}" or f"/tmp/logs/mxlogs/{name}" + effective_base = base_dir + name effective_base = os.path.abspath(os.path.expanduser(os.path.expandvars(effective_base))) # Ensure directories for file handlers exist @@ -114,11 +106,7 @@ def setup_logger( os.makedirs(log_dir, exist_ok=True) logging.config.dictConfig(config) - 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) + _SETUP_DONE = True return logging.getLogger(name) diff --git a/src/aarecommon/config/logging.yaml b/src/aarecommon/config/logging.yaml new file mode 100644 index 0000000..e6a2634 --- /dev/null +++ b/src/aarecommon/config/logging.yaml @@ -0,0 +1,32 @@ +version: 1 +disable_existing_loggers: False + +formatters: + simple: + format: "%(asctime)s - %(levelname)s - %(message)s" + +handlers: + console: + class: logging.StreamHandler + formatter: simple + level: DEBUG + stream: ext://sys.stdout + journal: + class: systemd.journal.JournaldLogHandler + level: DEBUG + +loggers: + aaredaq: + level: DEBUG + aaregui: + level: DEBUG + redis_lock: + level: WARNING + urllib3: + level: WARNING + matplotlib: + level: WARNING + +root: + level: WARNING + handlers: [console, journal] diff --git a/src/aarecommon/config/logging_configs/logging_dev.yaml b/src/aarecommon/config/logging_configs/logging_dev.yaml deleted file mode 100644 index 5ec04e3..0000000 --- a/src/aarecommon/config/logging_configs/logging_dev.yaml +++ /dev/null @@ -1,45 +0,0 @@ -version: 1 -disable_existing_loggers: False - -formatters: - detailed: - format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" - -handlers: - console: - class: logging.StreamHandler - level: DEBUG - formatter: detailed - stream: ext://sys.stdout - - app_file: - class: logging.handlers.RotatingFileHandler - level: DEBUG - formatter: detailed - filename: app.log - maxBytes: 1440000 #not to overflow a diskette - backupCount: 10 - encoding: utf8 - - error_file: - class: logging.handlers.RotatingFileHandler - level: ERROR - formatter: detailed - filename: errors.log - maxBytes: 1440000 - backupCount: 5 - encoding: utf8 - -loggers: - aareDAQ: - level: DEBUG - handlers: [console, app_file, error_file] - propagate: yes - aareGUI: - level: DEBUG - handlers: [console, app_file, error_file] - propagate: yes - -root: - level: DEBUG - handlers: [] diff --git a/src/aarecommon/config/logging_configs/logging_prod.yaml b/src/aarecommon/config/logging_configs/logging_prod.yaml deleted file mode 100644 index d9e42fd..0000000 --- a/src/aarecommon/config/logging_configs/logging_prod.yaml +++ /dev/null @@ -1,39 +0,0 @@ -version: 1 -disable_existing_loggers: False - -formatters: - simple: - format: "%(asctime)s - %(levelname)s - %(message)s" - -handlers: - app_file: - class: logging.handlers.RotatingFileHandler - level: INFO - formatter: simple - filename: logs/app.log - maxBytes: 1000000 - backupCount: 10 - encoding: utf8 - - error_file: - class: logging.handlers.RotatingFileHandler - level: ERROR - formatter: simple - filename: logs/errors.log - maxBytes: 500000 - backupCount: 5 - encoding: utf8 - -loggers: - aareDAQ: - level: DEBUG - handlers: [console, app_file, error_file] - propagate: no - aareGUI: - level: DEBUG - handlers: [ console, app_file, error_file ] - propagate: n - -root: - level: WARNING - handlers: [] -- 2.54.0 From 207612377d64c57bada0eee2fe772548debc3d21 Mon Sep 17 00:00:00 2001 From: David Perl Date: Fri, 14 Aug 2026 14:08:10 +0200 Subject: [PATCH 3/3] fix: simplify further --- src/aarecommon/config/logger.py | 68 +++++++++++++++--------------- src/aarecommon/config/logging.yaml | 32 -------------- 2 files changed, 33 insertions(+), 67 deletions(-) delete mode 100644 src/aarecommon/config/logging.yaml diff --git a/src/aarecommon/config/logger.py b/src/aarecommon/config/logger.py index 3678083..be64de5 100644 --- a/src/aarecommon/config/logger.py +++ b/src/aarecommon/config/logger.py @@ -1,9 +1,6 @@ import logging import logging.config import os -from pathlib import Path - -import yaml class IgnoreSuccessfulStatusAccessFilter(logging.Filter): @@ -69,44 +66,45 @@ def get_uvicorn_logging_config() -> dict: } -def get_log_config() -> dict: - config_path = Path(__file__).parent / "logging.yaml" - if not config_path.exists(): - raise FileNotFoundError(f"Logging config not found: {config_path}") - with open(config_path, "r") as f: - return yaml.safe_load(f.read()) +AARE_LOG_CONFIG = { + "version": 1, + "disable_existing_loggers": False, + "formatters": {"simple": {"format": "%(asctime)s - %(levelname)s - %(message)s"}}, + "handlers": { + "console": { + "class": "logging.StreamHandler", + "formatter": "simple", + "level": "DEBUG", + "stream": " ext://sys.stdout", + } + }, + "loggers": { + "aareDAQ": {"level": "DEBUG"}, + "aareGUI": {"level": "DEBUG"}, + "redis_lock": {"level": "WARNING"}, + "urllib3": {"level": "WARNING"}, + "matplotlib": {"level": "WARNING"}, + }, + "root": {"level": "WARNING", "handlers": ["console"]}, +} -_SETUP_DONE: bool = False +_setup_done: bool = False +_additional_loggers_setup: set[str] = set() -def setup_logger(name: str, base_dir: str = "~/tmp/mxlogs/"): - global _SETUP_DONE - if _SETUP_DONE: - return logging.getLogger(name) +def setup_logger(name: str): + logger = logging.getLogger(name) + if name not in _additional_loggers_setup: + _additional_loggers_setup.add(name) + logger.setLevel(logging.DEBUG) - config = get_log_config() + global _setup_done + if _setup_done: + return logger - # Force base directory to be under the user's home dir - effective_base = base_dir + name - effective_base = os.path.abspath(os.path.expanduser(os.path.expandvars(effective_base))) - - # Ensure directories for file handlers exist - handlers = config.get("handlers", {}) - - for h in handlers.values(): - filename = h.get("filename") - if not filename: - continue - abs_filename = os.path.join(effective_base, os.path.basename(filename)) - - h["filename"] = abs_filename - log_dir = os.path.dirname(abs_filename) - if log_dir and not os.path.exists(log_dir): - os.makedirs(log_dir, exist_ok=True) - - logging.config.dictConfig(config) - _SETUP_DONE = True + logging.config.dictConfig(AARE_LOG_CONFIG) + _setup_done = True return logging.getLogger(name) diff --git a/src/aarecommon/config/logging.yaml b/src/aarecommon/config/logging.yaml deleted file mode 100644 index e6a2634..0000000 --- a/src/aarecommon/config/logging.yaml +++ /dev/null @@ -1,32 +0,0 @@ -version: 1 -disable_existing_loggers: False - -formatters: - simple: - format: "%(asctime)s - %(levelname)s - %(message)s" - -handlers: - console: - class: logging.StreamHandler - formatter: simple - level: DEBUG - stream: ext://sys.stdout - journal: - class: systemd.journal.JournaldLogHandler - level: DEBUG - -loggers: - aaredaq: - level: DEBUG - aaregui: - level: DEBUG - redis_lock: - level: WARNING - urllib3: - level: WARNING - matplotlib: - level: WARNING - -root: - level: WARNING - handlers: [console, journal] -- 2.54.0