Skip to content

Instantly share code, notes, and snippets.

@minskmaz
Created September 26, 2013 01:11
Show Gist options
  • Save minskmaz/6708498 to your computer and use it in GitHub Desktop.
Save minskmaz/6708498 to your computer and use it in GitHub Desktop.
TWISTED LOGGING WITH PYTHON LOGGING LEVELS
import twisted
import logging
from twisted.python import log
### http://stackoverflow.com/questions/13748222/twisted-log-level-switch
class LevelFileLogObserver(log.FileLogObserver):
def __init__(self, f, level=logging.INFO):
log.FileLogObserver.__init__(self, f)
self.logLevel = level
def emit(self, eventDict):
if eventDict['isError']:
level = logging.ERROR
elif 'level' in eventDict:
level = eventDict['level']
else:
level = logging.INFO
if level == self.logLevel:
log.FileLogObserver.emit(self, eventDict)
#---------------------------------------------------------------------#
# USAGE OF LevelFileLogObserver #
#---------------------------------------------------------------------#
# THIS IS YOUR TAP.py FILE!
# mode is whatever the arbitrary 'mode' you set your twistd process in
# this way various twistds don't write into each other's logs
#IF THE LOGS DIRECTORY FOR THIS MODE DOESN'T EXIST CREATE IT
logs_dir = '/tmp/logs/%s/'%(mode)
if not os.path.exists(logs_dir):
os.makedirs(logs_dir)
# THE PYTHON LIBRARY LOG LEVELS
levels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
# GENERATE LOGFILES PER SERVER PER LOG LEVEL
for level in levels:
levlog = logfile.LogFile(
"%s_%s.log"%(mode, level.lower()),
logs_dir, rotateLength=100000,
maxRotatedFiles=100
)
# LevelFileLogObserver ROUTES LOG MESSAGES TO
logr = LevelFileLogObserver(levlog, level=getattr(logging, level))
twisted.python.log.addObserver(logr.emit)
# TEST EACH OF THE LOGS
log.msg('the level of this message is INFO',
level=logging.INFO)
log.msg('the level of this message is DEBUG',
level=logging.DEBUG)
log.msg('the level of this message is WARNING',
level=logging.WARNING)
log.msg('the level of this message is ERROR',
level=logging.ERROR)
log.msg('the level of this message is CRITICAL',
level=logging.CRITICAL)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment