浏览代码

factor out logger object initialisation

Antoine Beaupré 9 年之前
父节点
当前提交
26561a7766
共有 2 个文件被更改,包括 26 次插入2 次删除
  1. 21 0
      borg/logger.py
  2. 5 2
      borg/testsuite/logger.py

+ 21 - 0
borg/logger.py

@@ -1,3 +1,4 @@
+import inspect
 import logging
 import logging
 import sys
 import sys
 
 
@@ -17,3 +18,23 @@ def setup_logging(args, stream=None):
     l.setLevel(levels[args.verbose])
     l.setLevel(levels[args.verbose])
     return sh,
     return sh,
 
 
+def find_parent_module():
+    """find the name of a the first module calling this module
+
+    if we cannot find it, we return the current module's name
+    (__name__) instead.
+    """
+    try:
+        frame = inspect.currentframe().f_back
+        module = inspect.getmodule(frame)
+        while module is None or module.__name__ == __name__:
+            frame = frame.f_back
+            module = inspect.getmodule(frame)
+        return module.__name__
+    except AttributeError:
+        # somehow we failed to find our module
+        # return the logger module name by default
+        return __name__
+
+def create_logger(name=None):
+    return logging.getLogger(name or find_parent_module())

+ 5 - 2
borg/testsuite/logger.py

@@ -8,8 +8,8 @@ import sys
 from mock import Mock
 from mock import Mock
 import pytest
 import pytest
 
 
-from ..logger import setup_logging
-logger = logging.getLogger(__name__)
+from ..logger import find_parent_module, create_logger, setup_logging
+logger = create_logger()
 
 
 @pytest.fixture()
 @pytest.fixture()
 def io_logger():
 def io_logger():
@@ -38,3 +38,6 @@ def test_multiple_loggers(io_logger):
     logger = logging.getLogger('borg.testsuite.logger')
     logger = logging.getLogger('borg.testsuite.logger')
     logger.info('hello world 2')
     logger.info('hello world 2')
     assert io_logger.getvalue() == "borg.testsuite.logger: hello world 2\n"
     assert io_logger.getvalue() == "borg.testsuite.logger: hello world 2\n"
+
+def test_parent_module():
+    assert find_parent_module() == __name__