Browse Source

move logging setup to logger module

Antoine Beaupré 9 years ago
parent
commit
2d0dae4e8b
3 changed files with 50 additions and 23 deletions
  1. 2 16
      borg/archiver.py
  2. 19 0
      borg/logger.py
  3. 29 7
      borg/testsuite/logger.py

+ 2 - 16
borg/archiver.py

@@ -20,6 +20,7 @@ import traceback
 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 @@ Type "Yes I am sure" if you understand this and want to continue.\n""")
             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 @@ Type "Yes I am sure" if you understand this and want to continue.\n""")
                                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

+ 19 - 0
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,
+

+ 29 - 7
borg/testsuite/logger.py

@@ -3,16 +3,38 @@ try:
     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"