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

1""" 

2Logging module provides an interface to initialize 

3and use the python logger. 

4""" 

5 

6import os 

7import logging 

8 

9 

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') 

18 

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) 

27 

28 # create console logging handler 

29 ch = logging.StreamHandler() 

30 ch.setLevel(logging.DEBUG) 

31 ch.setFormatter(Logging.FORMAT) 

32 logger.addHandler(ch) 

33 

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) 

45 

46 @staticmethod 

47 def get_logger() -> logging.Logger: 

48 """ 

49 Retrieve the SUSI default logger 

50 """ 

51 return logging.getLogger(Logging.LOG_NAME) 

52 

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). 

57 

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)