Skip to content

Instantly share code, notes, and snippets.

@retr0h
Created February 3, 2017 00:24
Show Gist options
  • Save retr0h/a0ac0aa77faee9ace65025ae83821ce2 to your computer and use it in GitHub Desktop.
Save retr0h/a0ac0aa77faee9ace65025ae83821ce2 to your computer and use it in GitHub Desktop.
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