From 2d0dae4e8b51aed6a7f1e954d89bfd9c7c17d5c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Beaupr=C3=A9?= Date: Tue, 6 Oct 2015 12:22:57 -0400 Subject: [PATCH] move logging setup to logger module --- borg/archiver.py | 18 ++---------------- borg/logger.py | 19 +++++++++++++++++++ borg/testsuite/logger.py | 36 +++++++++++++++++++++++++++++------- 3 files changed, 50 insertions(+), 23 deletions(-) create mode 100644 borg/logger.py diff --git a/borg/archiver.py b/borg/archiver.py index d42386341..9effb770f 100644 --- a/borg/archiver.py +++ b/borg/archiver.py @@ -20,6 +20,7 @@ from . import __version__ from .archive import Archive, ArchiveChecker, CHUNKER_PARAMS from .compress import Compressor, COMPR_BUFFER +from .logger import setup_logging from .upgrader import AtticRepositoryUpgrader from .repository import Repository from .cache import Cache @@ -524,21 +525,6 @@ def do_help(self, parser, commands, args): parser.error('No help available on %s' % (args.topic,)) return self.exit_code - def setup_logging(self, args): - logging.raiseExceptions = False - l = logging.getLogger('') - sh = logging.StreamHandler(sys.stderr) - # other formatters will probably want this, but let's remove - # clutter on stderr - #sh.setFormatter(logging.Formatter('%(name)s: %(message)s')) - l.addHandler(sh) - levels = { None: logging.WARNING, - 0: logging.WARNING, - 1: logging.INFO, - 2: logging.DEBUG } - # default to WARNING, -v goes to INFO and -vv to DEBUG - l.setLevel(levels[args.verbose]) - def preprocess_args(self, args): deprecations = [ ('--hourly', '--keep-hourly', 'Warning: "--hourly" has been deprecated. Use "--keep-hourly" instead.'), @@ -986,7 +972,7 @@ def run(self, args=None): help='additional help on TOPIC') args = parser.parse_args(args or ['-h']) - self.setup_logging(args) + setup_logging(args) os.umask(args.umask) RemoteRepository.remote_path = args.remote_path RemoteRepository.umask = args.umask diff --git a/borg/logger.py b/borg/logger.py new file mode 100644 index 000000000..03255c000 --- /dev/null +++ b/borg/logger.py @@ -0,0 +1,19 @@ +import logging +import sys + +def setup_logging(args, stream=None): + logging.raiseExceptions = False + l = logging.getLogger('') + sh = logging.StreamHandler(stream) + # other formatters will probably want this, but let's remove + # clutter on stderr + #sh.setFormatter(logging.Formatter('%(name)s: %(message)s')) + l.addHandler(sh) + levels = { None: logging.WARNING, + 0: logging.WARNING, + 1: logging.INFO, + 2: logging.DEBUG } + # default to WARNING, -v goes to INFO and -vv to DEBUG + l.setLevel(levels[args.verbose]) + return sh, + diff --git a/borg/testsuite/logger.py b/borg/testsuite/logger.py index 7701dd60f..43b1c53a2 100644 --- a/borg/testsuite/logger.py +++ b/borg/testsuite/logger.py @@ -3,16 +3,38 @@ from StringIO import StringIO except ImportError: from io import StringIO +import sys +from mock import Mock import pytest -def test_mod_logger(): - logger = logging.getLogger(__name__) - io = StringIO() +from ..logger import setup_logging +logger = logging.getLogger(__name__) - ch = logging.StreamHandler(io) - ch.setFormatter(logging.Formatter('%(name)s: %(message)s')) - logger.addHandler(ch) +@pytest.fixture() +def io_logger(): + io = StringIO() + args = Mock() + args.verbose = 2 + assert args.verbose == 2 + handler, = setup_logging(args, io) + handler.setFormatter(logging.Formatter('%(name)s: %(message)s')) logger.setLevel(logging.DEBUG) + return io + +def test_setup_logging(io_logger): logger.info('hello world') - assert io.getvalue() == "borg.testsuite.logger: hello world\n" + assert io_logger.getvalue() == "borg.testsuite.logger: hello world\n" + +def test_multiple_loggers(io_logger): + logger = logging.getLogger(__name__) + logger.info('hello world 1') + assert io_logger.getvalue() == "borg.testsuite.logger: hello world 1\n" + logger = logging.getLogger('borg.testsuite.logger') + logger.info('hello world 2') + assert io_logger.getvalue() == "borg.testsuite.logger: hello world 1\nborg.testsuite.logger: hello world 2\n" + io_logger.truncate(0) + io_logger.seek(0) + logger = logging.getLogger('borg.testsuite.logger') + logger.info('hello world 2') + assert io_logger.getvalue() == "borg.testsuite.logger: hello world 2\n"