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

1import logging 

2import sys 

3 

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. 

11  

12 This is a helper for the end-user. Library modules should NOT call this; 

13 they should simply use `logging.getLogger(__name__)`. 

14  

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) 

22 

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) 

27 

28 # Remove existing handlers to avoid duplicates if called multiple times 

29 if root_logger.hasHandlers(): 

30 root_logger.handlers.clear() 

31 

32 root_logger.addHandler(handler) 

33 return root_logger 

34 

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