Merge "Install a qualified except hook."

This commit is contained in:
Jenkins 2012-08-02 16:13:33 +00:00 committed by Gerrit Code Review
commit bcb424dd73
2 changed files with 35 additions and 6 deletions

View File

@ -257,16 +257,18 @@ class PublishErrorsHandler(logging.Handler):
dict(error=record.msg))
def handle_exception(type, value, tb):
extra = {}
if CONF.verbose:
extra['exc_info'] = (type, value, tb)
getLogger().critical(str(value), **extra)
def _create_logging_excepthook(product_name):
def logging_excepthook(type, value, tb):
extra = {}
if CONF.verbose:
extra['exc_info'] = (type, value, tb)
getLogger(product_name).critical(str(value), **extra)
return logging_excepthook
def setup(product_name):
"""Setup logging."""
sys.excepthook = handle_exception
sys.excepthook = _create_logging_excepthook(product_name)
if CONF.log_config:
try:

View File

@ -1,7 +1,9 @@
import cStringIO
import exceptions
import logging
import subprocess
import sys
import textwrap
from openstack.common import context
from openstack.common import cfg
@ -219,6 +221,31 @@ class LegacyFormatterTestCase(test_utils.BaseTestCase):
self.assertEqual("NOCTXT: baz --DBG\n", self.stream.getvalue())
class ExceptionLoggingTestCase(test_utils.BaseTestCase):
"""Test that Exceptions are logged"""
def test_excepthook_logs_exception(self):
code = textwrap.dedent("""
import sys
from openstack.common import log as logging
logging.setup('somename')
raise Exception('Some error happened')
""")
child = subprocess.Popen([
sys.executable, "-"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
(out, err) = child.communicate(input=code)
self.assertTrue(
"CRITICAL somename [-] Some error happened",
msg="Exception is not logged")
class FancyRecordTestCase(test_utils.BaseTestCase):
"""Test how we handle fancy record keys that are not in the
base python logging"""