You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.0 KiB
Python
91 lines
2.0 KiB
Python
"""
|
|
Get log object
|
|
"""
|
|
import logging
|
|
|
|
from colorlog import ColoredFormatter
|
|
|
|
|
|
class Switch(object):
|
|
"""Just a mutable boolean to fool init Logs method"""
|
|
|
|
def __init__(self, b=True):
|
|
self._v = b
|
|
|
|
def __eq__(self, val):
|
|
return self._v == val
|
|
|
|
def __bool__(self):
|
|
return self._v
|
|
|
|
def __nonzero__(self):
|
|
"Python 2 bool"
|
|
return self._v
|
|
|
|
def true(self):
|
|
self._v = True
|
|
|
|
def false(self):
|
|
self._v = False
|
|
|
|
|
|
class Logs(object):
|
|
"""Get a logguer"""
|
|
|
|
lvl = logging.INFO
|
|
|
|
# As log attribute is muttable, we can use method to change
|
|
# log level accross instances
|
|
log = logging.getLogger('Entrypoint')
|
|
|
|
# Just a trick to avoid multiple formatter in logging instance
|
|
_switch = Switch(False)
|
|
|
|
def __init__(self):
|
|
if bool(self._switch):
|
|
# Log is static, don't override it
|
|
return None
|
|
formatter = ColoredFormatter(
|
|
"%(name)s %(log_color)s%(levelname)-8s%(reset)s %(message)s",
|
|
datefmt=None,
|
|
reset=True,
|
|
log_colors={
|
|
'DEBUG': 'cyan',
|
|
'INFO': 'green',
|
|
'WARNING': 'yellow',
|
|
'ERROR': 'red',
|
|
'CRITICAL': 'red',
|
|
}
|
|
)
|
|
|
|
handler = logging.StreamHandler()
|
|
handler.setFormatter(formatter)
|
|
self.log.addHandler(handler)
|
|
self.log.setLevel(self.lvl)
|
|
|
|
self._switch.true()
|
|
|
|
@classmethod
|
|
def set_debug(cls):
|
|
"""Set log level to debug"""
|
|
cls.lvl = logging.DEBUG
|
|
cls.log.setLevel(cls.lvl)
|
|
|
|
@classmethod
|
|
def set_info(cls):
|
|
"""Set log level to info"""
|
|
cls.lvl = logging.INFO
|
|
cls.log.setLevel(cls.lvl)
|
|
|
|
@classmethod
|
|
def set_warning(cls):
|
|
"""Set log level to warning"""
|
|
cls.lvl = logging.WARNING
|
|
cls.log.setLevel(cls.lvl)
|
|
|
|
@classmethod
|
|
def set_critical(cls):
|
|
"""Set log level to critical"""
|
|
cls.lvl = logging.CRITICAL
|
|
cls.log.setLevel(cls.lvl)
|