Commit 3ada3967 authored by Jim Fulton's avatar Jim Fulton

Merged the chrisw-error_logging branch:

Bug fixed:
- Internal ZEO errors were logged at the INFO level, rather
  than at the error level.
parent 1b1f21dc
...@@ -13,6 +13,9 @@ Bugs Fixed ...@@ -13,6 +13,9 @@ Bugs Fixed
- zope.testing was an unnecessary non-testing dependency. - zope.testing was an unnecessary non-testing dependency.
- Internal ZEO errors were logged at the INFO level, rather
than at the error level.
3.9.3 (2009-10-23) 3.9.3 (2009-10-23)
================== ==================
......
...@@ -438,15 +438,13 @@ class HeartbeatTests(ZEO.tests.ConnectionTests.CommonSetupTearDown): ...@@ -438,15 +438,13 @@ class HeartbeatTests(ZEO.tests.ConnectionTests.CommonSetupTearDown):
> client_timeout_count) > client_timeout_count)
class CatastrophicClientLoopFailure( class ZRPCConnectionTests(ZEO.tests.ConnectionTests.CommonSetupTearDown):
ZEO.tests.ConnectionTests.CommonSetupTearDown):
"""Test what happens when the client loop falls over
"""
def getConfig(self, path, create, read_only): def getConfig(self, path, create, read_only):
return """<mappingstorage 1/>""" return """<mappingstorage 1/>"""
def checkCatastrophicClientLoopFailure(self): def checkCatastrophicClientLoopFailure(self):
# Test what happens when the client loop falls over
self._storage = self.openClientStorage() self._storage = self.openClientStorage()
class Evil: class Evil:
...@@ -474,13 +472,30 @@ class CatastrophicClientLoopFailure( ...@@ -474,13 +472,30 @@ class CatastrophicClientLoopFailure(
self.assertEqual(log[1][0], "Couldn't close a dispatcher.") self.assertEqual(log[1][0], "Couldn't close a dispatcher.")
self.assert_('exc_info' in log[1][1]) self.assert_('exc_info' in log[1][1])
class ConnectionInvalidationOnReconnect( def checkExceptionLogsAtError(self):
ZEO.tests.ConnectionTests.CommonSetupTearDown): # Test the exceptions are logged at error
"""Test what happens when the client loop falls over self._storage = self.openClientStorage()
""" conn = self._storage._connection
# capture logging
log = []
conn.logger.log = (
lambda l, m, *a, **kw: log.append((l,m % a, kw))
)
def getConfig(self, path, create, read_only): # This is a deliberately bogus call to get an exception
return """<mappingstorage 1/>""" # logged
self._storage._connection.handle_request('foo',0,'history',(1,2,3,4))
# test logging
level,message,kw = log[1]
self.assertEqual(level,logging.ERROR)
self.failUnless(message.endswith(
') history() raised exception: history() takes at'
' most 3 arguments (5 given)'
))
self.assertEqual(kw,{'exc_info':True})
# cleanup
del conn.logger.log
def checkConnectionInvalidationOnReconnect(self): def checkConnectionInvalidationOnReconnect(self):
...@@ -1216,7 +1231,7 @@ slow_test_classes = [ ...@@ -1216,7 +1231,7 @@ slow_test_classes = [
quick_test_classes = [ quick_test_classes = [
FileStorageRecoveryTests, ConfigurationTests, HeartbeatTests, FileStorageRecoveryTests, ConfigurationTests, HeartbeatTests,
CatastrophicClientLoopFailure, ConnectionInvalidationOnReconnect, ZRPCConnectionTests,
] ]
class ServerManagingClientStorage(ClientStorage): class ServerManagingClientStorage(ClientStorage):
......
...@@ -586,7 +586,7 @@ class Connection(smac.SizedMessageAsyncConnection, object): ...@@ -586,7 +586,7 @@ class Connection(smac.SizedMessageAsyncConnection, object):
except Exception, msg: except Exception, msg:
if not isinstance(msg, self.unlogged_exception_types): if not isinstance(msg, self.unlogged_exception_types):
self.log("%s() raised exception: %s" % (name, msg), self.log("%s() raised exception: %s" % (name, msg),
logging.INFO, exc_info=True) logging.ERROR, exc_info=True)
error = sys.exc_info()[:2] error = sys.exc_info()[:2]
return self.return_error(msgid, flags, *error) return self.return_error(msgid, flags, *error)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment