# critical section
logging._acquireLock()
try:
- logging._handlers.clear()
- del logging._handlerList[:]
+ _clearExistingHandlers()
+
# Handlers add themselves to logging._handlers
handlers = _install_handlers(cp, formatters)
_install_loggers(cp, handlers, disable_existing_loggers)
# logger.disabled = 1
_handle_existing_loggers(existing, child_loggers, disable_existing)
+
+def _clearExistingHandlers():
+ """Clear and close existing handlers"""
+ logging._handlers.clear()
+ logging.shutdown(logging._handlerList[:])
+ del logging._handlerList[:]
+
+
IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I)
else:
disable_existing = config.pop('disable_existing_loggers', True)
- logging._handlers.clear()
- del logging._handlerList[:]
+ _clearExistingHandlers()
# Do formatters first - they don't refer to anything else
formatters = config.get('formatters', EMPTY_DICT)
"""Reading logging config from a .ini-style config file."""
+ check_no_resource_warning = support.check_no_resource_warning
expected_log_pat = r"^(\w+) \+\+ (\w+)$"
# config0 is a standard configuration.
datefmt=
"""
+ # config 8, check for resource warning
+ config8 = r"""
+ [loggers]
+ keys=root
+
+ [handlers]
+ keys=file
+
+ [formatters]
+ keys=
+
+ [logger_root]
+ level=DEBUG
+ handlers=file
+
+ [handler_file]
+ class=FileHandler
+ level=DEBUG
+ args=("{tempfile}",)
+ """
+
disable_test = """
[loggers]
keys=root
# Original logger output is empty.
self.assert_log_lines([])
+ def test_config8_ok(self):
+
+ def cleanup(h1, fn):
+ h1.close()
+ os.remove(fn)
+
+ with self.check_no_resource_warning():
+ fd, fn = tempfile.mkstemp(".log", "test_logging-X-")
+ os.close(fd)
+
+ # Replace single backslash with double backslash in windows
+ # to avoid unicode error during string formatting
+ if os.name == "nt":
+ fn = fn.replace("\\", "\\\\")
+
+ config8 = self.config8.format(tempfile=fn)
+
+ self.apply_config(config8)
+ self.apply_config(config8)
+
+ handler = logging.root.handlers[0]
+ self.addCleanup(cleanup, handler, fn)
+
def test_logger_disabling(self):
self.apply_config(self.disable_test)
logger = logging.getLogger('some_pristine_logger')
"""Reading logging config from a dictionary."""
+ check_no_resource_warning = support.check_no_resource_warning
expected_log_pat = r"^(\w+) \+\+ (\w+)$"
# config0 is a standard configuration.
logging.warning('Exclamation')
self.assertTrue(output.getvalue().endswith('Exclamation!\n'))
+ def test_config15_ok(self):
+
+ def cleanup(h1, fn):
+ h1.close()
+ os.remove(fn)
+
+ with self.check_no_resource_warning():
+ fd, fn = tempfile.mkstemp(".log", "test_logging-X-")
+ os.close(fd)
+
+ config = {
+ "version": 1,
+ "handlers": {
+ "file": {
+ "class": "logging.FileHandler",
+ "filename": fn
+ }
+ },
+ "root": {
+ "handlers": ["file"]
+ }
+ }
+
+ self.apply_config(config)
+ self.apply_config(config)
+
+ handler = logging.root.handlers[0]
+ self.addCleanup(cleanup, handler, fn)
+
def setup_via_listener(self, text, verify=None):
text = text.encode("utf-8")
# Ask for a randomly assigned port (by using port 0)