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.
pyentrypoint/pyentrypoint/logs.py

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)