Source code for sloth.utils.logging

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Handling loggers
"""
import sys
# try:
#     from zenlog import logging
# except ImportError:
import logging
# import tempfile

# set up default logging configureation
_default_format = '[%(name)-s] %(levelname)-s : %(message)s'
_default_format_file = '%(asctime)s [%(name)-s] %(levelname)-s : %(message)s'
_default_datefmt = '%Y-%m-%d %H:%M'
_levels = {'DEBUG': logging.DEBUG,
           'INFO': logging.INFO,
           'WARNING': logging.WARNING,
           'ERROR': logging.ERROR,
           'FATAL': logging.FATAL,
           'CRITICAL': logging.CRITICAL}

# # needs colorlog, not enabled yet!
# _default_colors = {'DEBUG': 'cyan',
#                    'INFO': 'green',
#                    'WARNING': 'yellow',
#                    'ERROR':    'red',
#                    'CRITICAL': 'red'}
#

_log = False


[docs] def logging_basicConfig(level='INFO'): """logging basic configuration""" global _log logging.basicConfig(level=_levels[level], format=_default_format, datefmt=_default_datefmt) # filename='{0}.log'.format(tempfile.mktemp()), # filemode='w') _log = True
[docs] def getConsoleHandler(): """Default console handler""" console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(logging.Formatter(fmt=_default_format)) return console_handler
[docs] def getFileHandler(filename, mode='a'): """Default console handler""" file_handler = logging.FileHandler(filename, mode=mode) file_handler.setFormatter(logging.Formatter(fmt=_default_format_file, datefmt=_default_datefmt)) return file_handler
[docs] def getLogger(name, level='INFO'): """Utility function to get the logger with customization .. warning:: NOT WORKING AS EXPECTED -> FIXME!!! Parameters ---------- name : str name of the logger level : str (optional) logging level ['INFO'] """ if not _log: logging_basicConfig(level=level) logger = logging.getLogger(name) logger.setLevel(_levels[level]) if (logger.hasHandlers()): logger.handlers.clear() logger.debug("custom logger setup > clear handlers") logger.addHandler(getConsoleHandler()) """Clear existing handlers and add current one""" logger.propagate = False logger.debug("custom logger setup > finished") return logger
[docs] def test_logger(level='DEBUG'): """Test custom logger""" logger = getLogger('test', level=level) logger.debug('a debug message') logger.info('an info message') logger.warning('a warning message') logger.error('an error message') logger.critical('a critical message') import tempfile flog = tempfile.mktemp(prefix='test_logger_', suffix='.log') logger.addHandler(getFileHandler(flog)) logger.info(f'added file handler -> {flog}') logger.info('testing again all log levels:') logger.debug('a debug message') logger.info('an info message') logger.warning('a warning message') logger.error('an error message') logger.critical('a critical message')
if __name__ == '__main__': test_logger()