From b40fb507c321b227de164809b4cea094163c5fb3 Mon Sep 17 00:00:00 2001 From: Bruno Cauet Date: Sat, 3 Jan 2015 16:35:19 +0100 Subject: [PATCH] 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. --- beets/logging.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 beets/logging.py diff --git a/beets/logging.py b/beets/logging.py new file mode 100644 index 000000000..2783c5ff5 --- /dev/null +++ b/beets/logging.py @@ -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