diff --git a/beets/library.py b/beets/library.py index 51dbef08f..68a722221 100644 --- a/beets/library.py +++ b/beets/library.py @@ -1,6 +1,7 @@ import sqlite3, os, sys, operator, re, shutil from beets.mediafile import MediaFile, FileTypeError from string import Template +import logging # Fields in the "items" table; all the metadata available for items in the # library. These are used directly in SQL; they are vulnerable to injection if @@ -44,6 +45,12 @@ library_options = { 'path_format': u'$artist/$album/$track $title.$extension', } +# Logger. + +log = logging.getLogger('beets') +log.setLevel(logging.DEBUG) +log.addHandler(logging.StreamHandler()) + #### exceptions #### @@ -60,10 +67,6 @@ def _normpath(path): database.""" return os.path.normpath(os.path.abspath(os.path.expanduser(path))) -def _log(msg): - """Print a log message.""" - print >>sys.stderr, msg - def _ancestry(path): """Return a list consisting of path's parent directory, its grandparent, and so on. For instance, _ancestry('/a/b/c') == ['/', '/a', '/a/b'].""" @@ -609,7 +612,7 @@ class Library(object): i.move(copy=True) i.add() except FileTypeError: - _log(f + ' of unknown type, skipping') + log.warn(f + ' of unknown type, skipping') def get(self, query=None): """Returns a ResultIterator to the items matching query, which may be diff --git a/beets/player/bpd.py b/beets/player/bpd.py index 3e4a3d3a8..a7df83439 100755 --- a/beets/player/bpd.py +++ b/beets/player/bpd.py @@ -9,8 +9,8 @@ import eventlet.api import re from string import Template import beets -import sys import traceback +import logging DEFAULT_PORT = 6600 @@ -44,8 +44,11 @@ VOLUME_MIN = 0 VOLUME_MAX = 100 -def debug(msg): - print >>sys.stderr, msg +# Logger. +log = logging.getLogger('bpd') +log.setLevel(logging.DEBUG) +log.addHandler(logging.StreamHandler()) + class BPDError(Exception): """An error that should be exposed to the client to the BPD @@ -420,7 +423,7 @@ class Connection(object): else: # Passed an iterable of strings (for instance, a Response). out = NEWLINE.join(data) + NEWLINE - debug(out) + log.debug(out) self.client.sendall(out) line_re = re.compile(r'([^\r\n]*)(?:\r\n|\n\r|\n|\r)') @@ -450,7 +453,7 @@ class Connection(object): clist = None # Initially, no command list is being constructed. for line in self.lines(): - debug(line) + log.debug(line) if clist is not None: # Command list already opened. @@ -516,7 +519,7 @@ class Command(object): except Exception, e: # An "unintentional" error. Hide it from the client. - debug(traceback.format_exc(e)) + l.error(traceback.format_exc(e)) return ErrorResponse(ERROR_SYSTEM, self.name, 'server error') if response is None: