Coverage for smartmdao / logging_config.py: 100%
16 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-02 20:01 +0200
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-02 20:01 +0200
1import logging
2import sys
4def configure_logging(
5 level: int = logging.INFO,
6 log_format: str = "%(asctime)s | %(levelname)-8s | %(name)s | %(message)s",
7 date_format: str = "%H:%M:%S"
8) -> logging.Logger:
9 """
10 Configures the root logger for the pipeline library.
12 This is a helper for the end-user. Library modules should NOT call this;
13 they should simply use `logging.getLogger(__name__)`.
15 Usage:
16 >>> from pipeline import configure_logging
17 >>> configure_logging(level=logging.DEBUG)
18 """
19 handler = logging.StreamHandler(sys.stdout)
20 formatter = logging.Formatter(log_format, datefmt=date_format)
21 handler.setFormatter(formatter)
23 # Get the library root logger (assuming the package is imported as 'pipeline' or similar)
24 # We configure the root logger to catch everything, or specific loggers if preferred.
25 root_logger = logging.getLogger()
26 root_logger.setLevel(level)
28 # Remove existing handlers to avoid duplicates if called multiple times
29 if root_logger.hasHandlers():
30 root_logger.handlers.clear()
32 root_logger.addHandler(handler)
33 return root_logger
35def get_logger(name: str) -> logging.Logger:
36 """
37 Factory to ensure every module gets a properly namespaced logger.
38 Includes a NullHandler by default so the library is silent unless configured.
39 """
40 logger = logging.getLogger(name)
41 logger.addHandler(logging.NullHandler())
42 return logger