Coverage for src/susi/base/logging.py: 62%
48 statements
« prev ^ index » next coverage.py v7.5.0, created at 2025-06-13 14:15 +0000
« prev ^ index » next coverage.py v7.5.0, created at 2025-06-13 14:15 +0000
1"""SUSI Logging module"""
2import os
3import logging
6class Logging:
7 """
8 Facade for python logging.
9 Provides easy setup and configuration methods.
10 """
11 #: Default name of the SUSI logger
12 LOG_NAME = 'SUSI'
13 #: Default Log Format
14 FORMAT = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
16 @staticmethod
17 def init_console(level: int = logging.INFO) -> None:
18 """
19 Init console logging.
20 """
21 # Delete Jupyter notebook root logger handler, see https://github.com/ipython/ipython/issues/8282
22 logger = logging.getLogger()
23 logger.handlers = []
25 # Create root logger with minimum supported log level
26 logger = logging.getLogger(Logging.LOG_NAME)
27 logger.setLevel(level)
29 # create console logging handler
30 ch = logging.StreamHandler()
31 ch.setLevel(logging.DEBUG)
32 ch.setFormatter(Logging.FORMAT)
33 logger.addHandler(ch)
35 @staticmethod
36 def init_file(file_name: str, level: int = logging.INFO) -> None:
37 """
38 Init logging to a log file.
39 """
40 os.makedirs(os.path.dirname(file_name), exist_ok=True)
41 logger = Logging.get_logger()
42 fh = logging.FileHandler(file_name)
43 fh.setLevel(level)
44 fh.setFormatter(Logging.FORMAT)
45 logger.addHandler(fh)
47 @staticmethod
48 def get_logger() -> logging.Logger:
49 """
50 Retrieve the SUSI default logger
51 """
52 return logging.getLogger(Logging.LOG_NAME)
54 @staticmethod
55 def set_log_level(level: int) -> None:
56 """
57 Set the logging level of the application. Per default the level is set to INFO (1).
59 ### Params
60 - level: (int) The level to set, where
61 - 0: DEBUG
62 - 1: INFO
63 - 2: WARNING
64 - 3: ERROR
65 - 4: CRITICAL
66 """
67 log = Logging.get_logger()
68 if level < 1:
69 log.setLevel(logging.DEBUG)
70 elif level < 2:
71 log.setLevel(logging.INFO)
72 elif level < 3:
73 log.setLevel(logging.WARNING)
74 elif level < 4:
75 log.setLevel(logging.ERROR)
76 else:
77 log.setLevel(logging.CRITICAL)
79 @staticmethod
80 def welcome(args, script_name, version: str = None, log_dir=None) -> None:
81 """
82 Print a welcome message in CLI scripts.
83 """
84 log = Logging.get_logger()
85 log.info("========== %s ==============", script_name)
86 if version is not None:
87 log.info('Version: %s', version)
88 log.info('Arguments: %s', args)
89 if log_dir is not None:
90 log.info('Logging directory: %s', log_dir)
91 log.info("======================================")