blob: 1e0f22ff6acde836035908ef3e3e13c423f44164 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
"""
Logger instantiator for use with Click utlity scripts
"""
import sys
import os
import logging
import colorlog
class Logger:
LOGGER_NAME = 'swimmer'
LOGFILE_FORMAT = "%(log_color)s%(levelname)-8s%(reset)s %(cyan)s%(filename)s:%(lineno)s:%(bold_cyan)s%(funcName)s() %(reset)s%(message)s"
def __init__(self):
pass
@staticmethod
def create(verbosity=4, logfile=None):
"""Configures a logger from click params
:param verbosity: (int) between 0 and 5
:param logfile: (str) path to logfile
:returns: logging root object
"""
loglevel = (5 - (max(0, min(verbosity, 5)))) * 10 # where logging.DEBUG = 10
date_format = '%Y-%m-%d %H:%M:%S'
if 'colorlog' in sys.modules and os.isatty(2):
cformat = '%(log_color)s' + Logger.LOGFILE_FORMAT
f = colorlog.ColoredFormatter(cformat, date_format,
log_colors = { 'DEBUG' : 'yellow', 'INFO' : 'white',
'WARNING' : 'bold_yellow', 'ERROR': 'bold_red',
'CRITICAL': 'bold_red' })
else:
f = logging.Formatter(Logger.LOGFILE_FORMAT, date_format)
logger = logging.getLogger(Logger.LOGGER_NAME)
logger.setLevel(loglevel)
# remove existing handlers
for handler in logger.handlers:
logger.removeHandler(handler)
if logfile:
# create file handler which logs even debug messages
fh = logging.FileHandler(logfile)
fh.setLevel(loglevel)
logger.addHandler(fh)
# add colored handler
ch = logging.StreamHandler()
ch.setFormatter(f)
logger.addHandler(ch)
if verbosity == 0:
logger.disabled = True
# test
# logger.debug('Hello Debug')
# logger.info('Hello Info')
# logger.warn('Hello Warn')
# logger.error('Hello Error')
# logger.critical('Hello Critical')
return logger
@staticmethod
def getLogger():
return logging.getLogger(Logger.LOGGER_NAME)
|