Skip to content

Instantly share code, notes, and snippets.

@brainsik
Created September 24, 2011 03:51
Show Gist options
  • Save brainsik/1238935 to your computer and use it in GitHub Desktop.
Save brainsik/1238935 to your computer and use it in GitHub Desktop.
ANSI colored Python logging
import logging
from termcolor import colored
class ColorLog(object):
colormap = dict(
debug=dict(color='grey', attrs=['bold']),
info=dict(color='white'),
warn=dict(color='yellow', attrs=['bold']),
warning=dict(color='yellow', attrs=['bold']),
error=dict(color='red'),
critical=dict(color='red', attrs=['bold']),
)
def __init__(self, logger):
self._log = logger
def __getattr__(self, name):
if name in ['debug', 'info', 'warn', 'warning', 'error', 'critical']:
return lambda s, *args: getattr(self._log, name)(
colored(s, **self.colormap[name]), *args)
return getattr(self._log, name)
log = ColorLog(logging.getLogger(__name__))
if __name__ == '__main__':
log.setLevel(logging.DEBUG)
stdout = logging.StreamHandler()
stdout.setLevel(logging.DEBUG)
log.addHandler(stdout)
log.debug("booooring . . .")
log.info("pleasing anecdote")
log.warn("awkward utterance")
log.error("drunken rudeness")
@pmcao
Copy link

pmcao commented Apr 23, 2013

This is excellent! However it does not print current function name in logging! Perhaps because of the lambda keyword in line 21?

@brainsik
Copy link
Author

@pmcao This is just using the default logging format. You can have it display whatever you want. See the Formatter docs:

http://docs.python.org/2/library/logging.html#logging.Formatter

@jaredjenkins
Copy link

Thanks for throwing this together.

@elsa-heer
Copy link

I really like your approach. Do you know how to avoid the ANSI escape codes in the log files if I add a file handler?

@KurtJacobson
Copy link

@elsa-heer I know it has been a long time since you commented on this, but I also needed to avoid the the ANSI escape sequences in the log file. Here is the solution I came up with: https://gist.github.com/KurtJacobson/c87425ad8db411c73c6359933e5db9f9

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment