Coverage for /Users/Newville/Codes/xraylarch/larch/utils/logging.py: 61%
51 statements
« prev ^ index » next coverage.py v7.3.2, created at 2023-11-09 10:08 -0600
« prev ^ index » next coverage.py v7.3.2, created at 2023-11-09 10:08 -0600
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3"""
4Handling loggers
5"""
6import sys
7import logging
9# import tempfile
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}
22# # needs colorlog, not enabled yet!
23# _default_colors = {'DEBUG': 'cyan',
24# 'INFO': 'green',
25# 'WARNING': 'yellow',
26# 'ERROR': 'red',
27# 'CRITICAL': 'red'}
28#
30_log = False
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
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
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
59def getLogger(name, level='INFO'):
60 """Utility function to get the logger with customization
62 .. warning:: NOT WORKING AS EXPECTED -> FIXME!!!
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])
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"""
82 logger.propagate = False
83 logger.debug("custom logger setup > finished")
85 return logger
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')
109if __name__ == '__main__':
110 test_logger()