Coverage for src/probable_fiesta/logger/builder/logger.py: 77%

75 statements  

« prev     ^ index     » next       coverage.py v7.1.0, created at 2023-01-30 18:57 -0500

1"""Logger class.""" 

2import logging 

3 

4class Logger: 

5 

6 def __init__(self, name=None, level=None, fmt=None, directory=None): 

7 self.name = name 

8 self.level = level 

9 self.fmt = fmt 

10 self.directory = directory 

11 self.logger = None 

12 self.file_handler = None 

13 

14 def __str__(self) -> str: 

15 return f"Logger: {self.__dict__}" 

16 

17 def get_logger(self, name=None, level=None, fmt=None, directory=None): 

18 if name is not None: 

19 self.name = name 

20 if level is not None: 

21 self.level = level 

22 if fmt is not None: 

23 self.fmt = fmt 

24 if directory is not None: 

25 self.directory = directory 

26 if self.name is None: 

27 print("Name not set. Cannot create logger.") 

28 return None 

29 _logger = logging.getLogger(self.name) 

30 _logger.setLevel(self.parse_level(self.level)) 

31 if self.file_handler is None: 

32 self.create_file_handler() 

33 

34 _logger.addHandler(self.file_handler) 

35 self.logger = _logger 

36 return self.logger 

37 

38 def create_file_handler(self): 

39 if self.name is None: 

40 print("Name not set. Cannot create file handler.") 

41 return None 

42 if not self.directory: 

43 self.directory = "./" 

44 _file_handler = logging.FileHandler(self.directory+f"/{self.name}.log") 

45 _file_handler.setLevel(self.parse_level(self.level)) 

46 _file_handler.setFormatter(self.fmt) 

47 self.file_handler = _file_handler 

48 print("File handler created", self.file_handler) 

49 return self.file_handler 

50 

51 def parse_level(self, level): # defaults to info 

52 if level is None: 

53 return logging.INFO 

54 if level == "DEBUG": 

55 return logging.DEBUG 

56 if level == "INFO": 

57 return logging.INFO 

58 if level == "WARNING": 

59 return logging.WARNING 

60 if level == "ERROR": 

61 return logging.ERROR 

62 if level == "CRITICAL": 

63 return logging.CRITICAL 

64 return logging.INFO 

65 

66 def set_logger(self, logger): 

67 self.logger = logger 

68 return self.logger 

69 

70 @staticmethod 

71 def new(name=None, level=None, fmt=None, directory=None): 

72 return Logger(name, level, fmt, directory) 

73 

74 @staticmethod 

75 def new_logger(name=None, level=None, fmt=None, directory=None): 

76 logger = Logger.new(name, level, fmt, directory) 

77 return logger.get_logger() 

78 

79 

80 class Factory(): 

81 @staticmethod 

82 def new(name=None, level=None, fmt=None, directory=None): 

83 return Logger.new(name, level, fmt, directory) 

84 

85 @staticmethod 

86 def create_file_handler(name=None, level=None, fmt=None, directory=None) -> logging.FileHandler: 

87 logger = Logger.new(name, level, fmt, directory) 

88 return logger.create_file_handler() 

89 

90 

91 factory = Factory() 

92 

93 

94