# Configure logging
self.log = logging.getLogger('babel')
self.log.setLevel(options.loglevel)
- handler = logging.StreamHandler()
+ # Don't add a new handler for every instance initialization (#227), this
+ # would cause duplicated output when the CommandLineInterface as an
+ # normal Python class.
+ if self.log.handlers:
+ handler = self.log.handlers[0]
+ else:
+ handler = logging.StreamHandler()
+ self.log.addHandler(handler)
handler.setLevel(options.loglevel)
formatter = logging.Formatter('%(message)s')
handler.setFormatter(formatter)
- self.log.addHandler(handler)
if options.list_locales:
identifiers = localedata.list()
from distutils.errors import DistutilsOptionError
from distutils.log import _global_log
import doctest
+import logging
import os
import shutil
from StringIO import StringIO
sys.argv = ['pybabel']
sys.stdout = StringIO()
sys.stderr = StringIO()
+
+ # Logging handlers will be reused if possible (#227). This breaks the
+ # implicit assumption that our newly created StringIO for sys.stderr
+ # contains the console output. Removing the old handler ensures that a
+ # new handler with our new StringIO instance will be used.
+ log = logging.getLogger('babel')
+ for handler in log.handlers:
+ log.removeHandler(handler)
self.cli = frontend.CommandLineInterface()
def tearDown(self):