Coverage for src/spectroflat/base/logging.py: 56%
36 statements
« prev ^ index » next coverage.py v7.3.2, created at 2024-03-28 07:59 +0000
« prev ^ index » next coverage.py v7.3.2, created at 2024-03-28 07:59 +0000
1"""
2Logging module provides an interface to initialize
3and use the python logger.
4"""
6import os
7import logging
10class Logging:
11 """
12 Facade for python logging.
13 Provides easy setup and configuration methods.
14 """
15 LOG_NAME = 'SPFF'
16 #: Default Log Format
17 FORMAT = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
19 @staticmethod
20 def init_console(level: int = logging.INFO) -> None:
21 """
22 Init console logging.
23 """
24 # Create root logger with minimum supported log level
25 logger = logging.getLogger(Logging.LOG_NAME)
26 logger.setLevel(level)
28 # create console logging handler
29 ch = logging.StreamHandler()
30 ch.setLevel(logging.DEBUG)
31 ch.setFormatter(Logging.FORMAT)
32 logger.addHandler(ch)
34 @staticmethod
35 def init_file(file_name: str, level: int = logging.INFO) -> None:
36 """
37 Init logging to a log file.
38 """
39 os.makedirs(os.path.dirname(file_name), exist_ok=True)
40 logger = Logging.get_logger()
41 fh = logging.FileHandler(file_name)
42 fh.setLevel(level)
43 fh.setFormatter(Logging.FORMAT)
44 logger.addHandler(fh)
46 @staticmethod
47 def get_logger() -> logging.Logger:
48 """
49 Retrieve the SUSI default logger
50 """
51 return logging.getLogger(Logging.LOG_NAME)
53 @staticmethod
54 def set_log_level(level: int) -> None:
55 """
56 Set the logging level of the application. Per default the level is set to INFO (1).
58 ### Params
59 - level: (int) The level to set, where
60 - 0: DEBUG
61 - 1: INFO
62 - 2: WARNING
63 - 3: ERROR
64 - 4: CRITICAL
65 """
66 log = Logging.get_logger()
67 if level < 1:
68 log.setLevel(logging.DEBUG)
69 elif level < 2:
70 log.setLevel(logging.INFO)
71 elif level < 3:
72 log.setLevel(logging.WARNING)
73 elif level < 4:
74 log.setLevel(logging.ERROR)
75 else:
76 log.setLevel(logging.CRITICAL)