Coverage for larch/utils/logging.py: 60%

50 statements  

« prev     ^ index     » next       coverage.py v7.6.0, created at 2024-10-16 21:04 +0000

1#!/usr/bin/env python 

2# -*- coding: utf-8 -*- 

3""" 

4Handling loggers 

5""" 

6import sys 

7import logging 

8 

9# import tempfile 

10 

11# set up default logging configureation 

12_default_format = '[%(name)-s] %(levelname)-s : %(message)s' 

13_default_format_file = '%(asctime)s [%(name)-s] %(levelname)-s : %(message)s' 

14_default_datefmt = '%Y-%m-%d %H:%M' 

15_levels = {'DEBUG': logging.DEBUG, 

16 'INFO': logging.INFO, 

17 'WARNING': logging.WARNING, 

18 'ERROR': logging.ERROR, 

19 'FATAL': logging.FATAL, 

20 'CRITICAL': logging.CRITICAL} 

21 

22# # needs colorlog, not enabled yet! 

23# _default_colors = {'DEBUG': 'cyan', 

24# 'INFO': 'green', 

25# 'WARNING': 'yellow', 

26# 'ERROR': 'red', 

27# 'CRITICAL': 'red'} 

28# 

29 

30_log = False 

31 

32 

33def logging_basicConfig(level='INFO'): 

34 """logging basic configuration""" 

35 global _log 

36 logging.basicConfig(level=_levels[level], 

37 format=_default_format, 

38 datefmt=_default_datefmt) 

39 # filename='{0}.log'.format(tempfile.mktemp()), 

40 # filemode='w') 

41 _log = True 

42 

43 

44def getConsoleHandler(): 

45 """Default console handler""" 

46 console_handler = logging.StreamHandler(sys.stdout) 

47 console_handler.setFormatter(logging.Formatter(fmt=_default_format)) 

48 return console_handler 

49 

50 

51def getFileHandler(filename, mode='a'): 

52 """Default console handler""" 

53 file_handler = logging.FileHandler(filename, mode=mode) 

54 file_handler.setFormatter(logging.Formatter(fmt=_default_format_file, 

55 datefmt=_default_datefmt)) 

56 return file_handler 

57 

58 

59def getLogger(name, level='INFO'): 

60 """Utility function to get the logger with customization 

61 

62 .. warning:: NOT WORKING AS EXPECTED -> FIXME!!! 

63 

64 Parameters 

65 ---------- 

66 name : str 

67 name of the logger 

68 level : str (optional) 

69 logging level ['INFO'] 

70 """ 

71 if not _log: 

72 logging_basicConfig(level=level) 

73 logger = logging.getLogger(name) 

74 logger.setLevel(_levels[level]) 

75 

76 if (logger.hasHandlers()): 

77 logger.handlers.clear() 

78 logger.debug("custom logger setup > clear handlers") 

79 logger.addHandler(getConsoleHandler()) 

80 """Clear existing handlers and add current one""" 

81 

82 logger.propagate = False 

83 logger.debug("custom logger setup > finished") 

84 

85 return logger 

86 

87 

88def test_logger(level='DEBUG'): 

89 """Test custom logger""" 

90 logger = getLogger('test', level=level) 

91 logger.debug('a debug message') 

92 logger.info('an info message') 

93 logger.warning('a warning message') 

94 logger.error('an error message') 

95 logger.critical('a critical message') 

96 import tempfile 

97 flog = tempfile.mktemp(prefix='test_logger_', suffix='.log') 

98 logger.addHandler(getFileHandler(flog)) 

99 logger.info(f'added file handler -> {flog}') 

100 logger.info('testing again all log levels:') 

101 logger.debug('a debug message') 

102 logger.info('an info message') 

103 logger.warning('a warning message') 

104 logger.error('an error message') 

105 logger.critical('a critical message') 

106 

107 

108 

109if __name__ == '__main__': 

110 test_logger()