Skip to content

Instantly share code, notes, and snippets.

@after-the-sunrise
Created April 21, 2018 14:36
Show Gist options
  • Save after-the-sunrise/751035b06738302ad920adf8bdce0a3f to your computer and use it in GitHub Desktop.
Save after-the-sunrise/751035b06738302ad920adf8bdce0a3f to your computer and use it in GitHub Desktop.
Python logging formatter with multiple formatters per logging level.
from logging import getLogger, Formatter, StreamHandler, DEBUG, ERROR
class LeveledFormatter(Formatter):
_formats = {}
def __init__(self, *args, **kwargs):
super(LeveledFormatter, self).__init__(*args, **kwargs)
def set_formatter(self, level, formatter):
self._formats[level] = formatter
def format(self, record):
f = self._formats.get(record.levelno)
if f is None:
f = super(LeveledFormatter, self)
return f.format(record)
if __name__ == '__main__':
formatter = LeveledFormatter('??? %(message)s')
formatter.set_formatter(DEBUG, Formatter('DBG %(message)s'))
formatter.set_formatter(ERROR, Formatter('ERR %(message)s'))
handler = StreamHandler()
handler.setFormatter(formatter)
logger = getLogger(__name__)
logger.setLevel(DEBUG)
logger.addHandler(handler)
logger.debug('foo')
logger.info('bar')
logger.warning('hoge')
logger.error('piyo')
# [Output]
# DBG foo
# ??? bar
# ??? hoge
# ERR piyo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment