diff --git a/tests/__init__.py b/tests/__init__.py index 0bc5e4b..1f491f7 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -9,10 +9,8 @@ :license: MIT, see LICENSE for more details. ''' -import vdirsyncer.log from vdirsyncer.utils.compat import text_type from vdirsyncer.utils.vobject import normalize_item as _normalize_item -vdirsyncer.log.set_level(vdirsyncer.log.logging.DEBUG) def blow_up(*a, **kw): diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..5e48a41 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +''' + tests.conftest + ~~~~~~~~~~~~~~ + + General-purpose fixtures for vdirsyncer's testsuite. + + :copyright: (c) 2014 Markus Unterwaditzer & contributors + :license: MIT, see LICENSE for more details. +''' +import pytest + +import vdirsyncer.log + + +@pytest.fixture(autouse=True) +def setup_logging(): + vdirsyncer.log.set_level(vdirsyncer.log.logging.DEBUG) + vdirsyncer.log.add_handler(vdirsyncer.log.stdout_handler) diff --git a/vdirsyncer/log.py b/vdirsyncer/log.py index 0f9b30f..7ad6f7f 100644 --- a/vdirsyncer/log.py +++ b/vdirsyncer/log.py @@ -7,6 +7,7 @@ :license: MIT, see LICENSE for more details. ''' import logging +import sys import click @@ -26,44 +27,43 @@ class ColorFormatter(logging.Formatter): if level in self.colors: prefix = click.style('{}: '.format(level), **self.colors[level]) - record.msg = prefix + record.msg + record.msg = '\n'.join(prefix + x + for x in str(record.msg).splitlines()) return logging.Formatter.format(self, record) class ClickStream(object): def write(self, string): - click.echo(string, nl=False) + click.echo(string, file=sys.stderr, nl=False) stdout_handler = logging.StreamHandler(ClickStream()) stdout_handler.formatter = ColorFormatter() -default_level = logging.INFO +_level = logging.INFO +_handlers = [] -def add_handler(handler): - for logger in loggers.values(): - logger.addHandler(handler) - - -def create_logger(name): - x = logging.getLogger(name) - x.setLevel(default_level) - return x - - -loggers = {} +_loggers = {} def get(name): assert name.startswith('vdirsyncer.') - if name not in loggers: - loggers[name] = create_logger(name) - return loggers[name] + if name not in _loggers: + _loggers[name] = x = logging.getLogger(name) + x.handlers = _handlers + x.setLevel(_level) + + return _loggers[name] + + +def add_handler(handler): + if handler not in _handlers: + _handlers.append(handler) def set_level(level): - global default_level - default_level = level - for logger in loggers.values(): - logger.setLevel(level) + global _level + _level = level + for logger in _loggers.values(): + logger.setLevel(_level)