From d1136178de0fb2fc0e4a72062f1eb11a39a8ce65 Mon Sep 17 00:00:00 2001 From: foefl Date: Fri, 29 May 2026 09:43:28 +0200 Subject: [PATCH] add logging config, related to #8 --- src/dopt_basics/logging.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/dopt_basics/logging.py b/src/dopt_basics/logging.py index 6fb14d0..df15aba 100644 --- a/src/dopt_basics/logging.py +++ b/src/dopt_basics/logging.py @@ -1,5 +1,6 @@ from __future__ import annotations +import dataclasses as dc import logging import logging.handlers from pathlib import Path @@ -21,33 +22,41 @@ NULL_HANDLER = logging.NullHandler() BASE_LOGGER = logging.getLogger("dopt_base") +@dc.dataclass(eq=False, slots=True, kw_only=True) +class LoggingConfig: + enable_stderr: bool + enable_file: bool = False + logging_dir: Path | None = None + log_filename: str = LOG_FILENAME + file_max_bytes: int = 5_242_880 + file_backup_count: int = 1 + + def setup_logging( - enable_stderr: bool, - enable_file: bool = False, - logging_dir: Path | None = None, - log_filename: str = LOG_FILENAME, + config: LoggingConfig, ) -> None: # ** formatters logging.Formatter.converter = gmtime LOGGER_ALL_FORMATER = logging.Formatter(fmt=LOG_FMT, datefmt=LOG_DATE_FMT) # ** handlers - if enable_stderr: + if config.enable_stderr: logger_all_handler_stderr = logging.StreamHandler() logger_all_handler_stderr.setLevel(DEFAULT_LOGLEVEL_STDERR) logger_all_handler_stderr.setFormatter(LOGGER_ALL_FORMATER) else: # pragma: no cover logger_all_handler_stderr = NULL_HANDLER - if enable_file and logging_dir is None: + if config.enable_file and config.logging_dir is None: raise ValueError("Logging path must be provided to write to log file") - elif enable_file: - assert logging_dir - log_file_path = logging_dir / log_filename + elif config.enable_file: + if config.logging_dir is None: + raise ValueError("Logging directory must be provided if file writing is selected") + log_file_path = config.logging_dir / config.log_filename logger_all_handler_file = logging.handlers.RotatingFileHandler( log_file_path, encoding="utf-8", - maxBytes=5_242_880, - backupCount=1, + maxBytes=config.file_max_bytes, + backupCount=config.file_backup_count, delay=True, ) logger_all_handler_file.setLevel(DEFAULT_LOGLEVEL_FILE)