Skip to content

Instantly share code, notes, and snippets.

@agness
Created August 22, 2013 17:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save agness/6310316 to your computer and use it in GitHub Desktop.
Save agness/6310316 to your computer and use it in GitHub Desktop.
Logging in Python with Tornado's pretty print formatter and routing all messages with INFO level and above to STDOUT, and all messages below to STDERR.
#!/usr/bin/env python
import sys
import logging
import tornado.log
# For pretty log messages, if available
try:
import curses
except ImportError:
curses = None
class _SingleLevelFilter(logging.Filter):
def __init__(self, passlevel, reject):
self.passlevel = passlevel
self.reject = reject
def filter(self, record):
if self.reject:
return (record.levelno != self.passlevel)
else:
return (record.levelno == self.passlevel)
def setup_custom_logging():
color = False
if curses and sys.stderr.isatty():
try:
curses.setupterm()
if curses.tigetnum("colors") > 0:
color = True
except Exception:
pass
h1 = logging.StreamHandler(sys.stdout)
h1.setFormatter(tornado.log.LogFormatter(color=color))
f1 = _SingleLevelFilter(logging.INFO, False)
h1.addFilter(f1)
rootLogger = logging.getLogger()
rootLogger.addHandler(h1)
h2 = logging.StreamHandler(sys.stderr)
h2.setFormatter(tornado.log.LogFormatter(color=color))
f2 = _SingleLevelFilter(logging.INFO, True)
h2.addFilter(f2)
rootLogger.addHandler(h2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment