Created
February 3, 2017 00:24
-
-
Save retr0h/a0ac0aa77faee9ace65025ae83821ce2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import logging | |
import sys | |
import colorama | |
colorama.init(autoreset=True) | |
SUCCESS = 100 | |
NOTICE = 101 | |
class Loggie(logging.getLoggerClass()): | |
def __init__(self, name, level=logging.NOTSET): | |
super(logging.getLoggerClass(), self).__init__(name, level) | |
logging.addLevelName(SUCCESS, 'SUCCESS') | |
def success(self, msg, *args, **kwargs): | |
if self.isEnabledFor(SUCCESS): | |
self._log(SUCCESS, msg, args, **kwargs) | |
def notice(self, msg, *args, **kwargs): | |
if self.isEnabledFor(NOTICE): | |
self._log(NOTICE, msg, args, **kwargs) | |
class TrailingNewlineFormatter(logging.Formatter): | |
def format(self, record): | |
if record.msg: | |
record.msg = record.msg.rstrip() | |
return super(TrailingNewlineFormatter, self).format(record) | |
def get_logger(name=None): | |
""" | |
Build a logger with the given name and returns the logger. | |
:param name: The name for the logger. This is usually the module | |
name, ``__name__``. | |
:return: logger object | |
""" | |
logging.setLoggerClass(Loggie) | |
logger = logging.getLogger(name) | |
logger.setLevel(logging.DEBUG) | |
logger.addHandler(_get_info_handler()) | |
logger.addHandler(_get_notice_handler()) | |
logger.addHandler(_get_warn_handler()) | |
logger.addHandler(_get_error_handler()) | |
logger.addHandler(_get_success_handler()) | |
logger.propagate = False | |
return logger | |
def _get_info_handler(): | |
handler = logging.StreamHandler(sys.stdout) | |
handler.setLevel(logging.INFO) | |
handler.setFormatter(TrailingNewlineFormatter(' %(message)s')) | |
return handler | |
def _get_notice_handler(): | |
color = colorama.Fore.CYAN | |
handler = logging.StreamHandler(sys.stdout) | |
handler.setLevel(NOTICE) | |
handler.setFormatter( | |
TrailingNewlineFormatter('--> {}%(message)s'.format(color))) | |
return handler | |
def _get_warn_handler(): | |
color = colorama.Fore.YELLOW | |
handler = logging.StreamHandler(sys.stdout) | |
handler.setLevel(logging.WARN) | |
handler.setFormatter( | |
TrailingNewlineFormatter('{}%(message)s'.format(color))) | |
return handler | |
def _get_error_handler(): | |
color = colorama.Fore.RED | |
handler = logging.StreamHandler(sys.stderr) | |
handler.setLevel(logging.ERROR) | |
handler.setFormatter( | |
TrailingNewlineFormatter('{}%(message)s'.format(color))) | |
return handler | |
def _get_success_handler(): | |
color = colorama.Fore.GREEN | |
handler = logging.StreamHandler(sys.stdout) | |
handler.setLevel(SUCCESS) | |
handler.setFormatter( | |
TrailingNewlineFormatter('{}%(message)s'.format(color))) | |
return handler | |
LOG = get_logger(__name__) | |
LOG.info('info') | |
LOG.warn('warn') | |
LOG.error('error') | |
LOG.notice('notice') | |
LOG.success('success') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment