#!/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()