Offer new-style formatting for logging

beets.logging is a drop-in replacement for logging. Any logger created
from beets.logging.getLogger() will use {}-style formatting instead of
%-style, on python 2 and 3.
This commit is contained in:
Bruno Cauet 2015-01-03 16:35:19 +01:00
parent 405726ba13
commit b40fb507c3

37
beets/logging.py Normal file
View file

@ -0,0 +1,37 @@
"""Allow {}-style formatting on python 2 and 3
Provide everything the "logging" module does, the only difference is that when
getLogger(name) instantiates a logger that logger uses {}-style formatting.
"""
from __future__ import absolute_import
from copy import copy
from logging import *
# create a str.format-based logger
class StrFormatLogger(Logger):
class _LogMessage(object):
def __init__(self, msg, args, kwargs):
self.msg = msg
self.args = args
self.kwargs = kwargs
def __str__(self):
return self.msg.format(*self.args, **self.kwargs)
def _log(self, level, msg, args, exc_info=None, extra=None, **kwargs):
"""Log 'msg.format(*args, **kwargs)"""
msg = self._LogMessage(msg, args, kwargs)
return super(StrFormatLogger, self)._log(level, msg, (), exc_info, extra)
my_manager = copy(Logger.manager)
my_manager.loggerClass = StrFormatLogger
def getLogger(name=None):
if name:
return my_manager.getLogger(name)
else:
return root