From 0c287311cef0de09a209973ad4dce89818504fa7 Mon Sep 17 00:00:00 2001 From: Andrew Mahone Date: Wed, 14 Jul 2010 22:54:52 -0400 Subject: [PATCH] Fix broken loglevel handling in logging --- audiomangler/cli.py | 9 +++++++++ audiomangler/logging.py | 31 +++++++++++++++---------------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/audiomangler/cli.py b/audiomangler/cli.py index 8392169..06c3a42 100644 --- a/audiomangler/cli.py +++ b/audiomangler/cli.py @@ -168,11 +168,20 @@ def replaygain_task_generator(album_list): continue profile = profiles.pop() if profile[1] not in (8000, 11025, 12000, 16000, 22050, 24, 32, 44100, 48000): + msg(consoleformat=u"Skipping replaygain for %(albumtitle)s because of unsupported sample rate", + format="skip rg (sample rate unsupported): %(tracks)r", + albumtitle=album[0].meta.flat().get('album', '[unknown]'), tracks=tuple(t.filename for t in album), loglevel=VERBOSE) continue codec = get_codec(profile[0]) if not codec or not codec.has_replaygain: + msg(consoleformat=u"Skipping replaygain for %(albumtitle)s because codec does not support it", + format="skip rg (codec unsupported): %(tracks)r", + albumtitle=album[0].meta.flat().get('album', '[unknown]'), tracks=tuple(t.filename for t in album), loglevel=VERBOSE) continue if reduce(lambda x, y: x and y.has_replaygain(), album, True): + msg(consoleformat=u"Skipping replaygain for %(albumtitle)s because all tracks have replaygain tags", + format="skip rg (already present): %(tracks)r", + albumtitle=album[0].meta.flat().get('album', '[unknown]'), tracks=tuple(t.filename for t in album), loglevel=VERBOSE) continue msg(consoleformat=u"Adding replaygain values to %(albumtitle)s", format="rg: %(tracks)r", diff --git a/audiomangler/logging.py b/audiomangler/logging.py index f7bc0dc..34e3615 100644 --- a/audiomangler/logging.py +++ b/audiomangler/logging.py @@ -8,16 +8,14 @@ try: except ImportError: from StringIO import StringIO -loglevels = dict(ERROR=0, WARNING=1, INFO=2, DEBUG=3) +loglevels = dict(ERROR=0, WARNING=1, INFO=2, VERBOSE=3, DEBUG=4) loglevels.update(map(reversed, loglevels.items())) -ERROR, WARNING, INFO, DEBUG = range(4) +ERROR, WARNING, INFO, VERBOSE, DEBUG = range(5) class FilteredFileLogObserver(log.FileLogObserver): def __init__(self, f, loglevel=INFO): self.output = f - if isinstance(loglevel, basestring): - loglevel = loglevels[loglevel] - self.loglevel = loglevel + self.loglevel = get_level(loglevel, INFO) def emit(self, eventDict): if '_noignore' not in eventDict and not eventDict['isError']: return @@ -38,7 +36,7 @@ class FilteredFileLogObserver(log.FileLogObserver): class FilteredConsoleLogObserver: def __init__(self, loglevel=INFO): - self.loglevel = loglevel + self.loglevel = get_level(loglevel, INFO) def start(self): log.addObserver(self.emit) @@ -48,6 +46,7 @@ class FilteredConsoleLogObserver: def emit(self, eventDict): if '_noignore' not in eventDict and not eventDict['isError']: return + if eventDict.get('loglevel', DEBUG) > self.loglevel: return encoding = sys.stdout.encoding @@ -97,7 +96,12 @@ def err(*msg, **kwargs): log.msg(_noignore=1, *msg, **kwargs) def msg(*msg, **kwargs): - global logfile + global logfile, logout + if logout is None: + try: + logout = FilteredConsoleLogObserver(Config['consolelevel']) + logout.start() + except: pass kwargs.setdefault('loglevel', DEBUG) if kwargs['loglevel'] == ERROR: err(_noignore=1, *msg, **kwargs) @@ -131,15 +135,10 @@ def cleanup(): print "Errors are also recorded in the logfile '%s'." % os.path.abspath(logfile.output.name) sys.stdout.flush() -try: - logout = FilteredConsoleLogObserver(Config['consolelevel']) - logout.start() - if log.defaultObserver: - log.defaultObserver.stop() - log.defaultObserver = None -except: - pass +if log.defaultObserver: + log.defaultObserver.stop() + log.defaultObserver = None atexit.register(cleanup) -__all__ = ['err', 'msg', 'fatal', 'ERROR', 'WARNING', 'INFO', 'DEBUG'] \ No newline at end of file +__all__ = ['err', 'msg', 'fatal', 'ERROR', 'WARNING', 'INFO', 'VERBOSE', 'DEBUG'] \ No newline at end of file -- 2.11.4.GIT