]> granicus.if.org Git - python/commitdiff
logging: Added tests for _logRecordClass changes.
authorVinay Sajip <vinay_sajip@yahoo.co.uk>
Tue, 19 Oct 2010 20:44:14 +0000 (20:44 +0000)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Tue, 19 Oct 2010 20:44:14 +0000 (20:44 +0000)
Lib/logging/__init__.py
Lib/test/test_logging.py
Misc/NEWS

index 0c6a186ee4f6791cf3623e4c56491a52a52f1cd0..995d313c1184009a0aa4b6ce216693273a9aa65c 100644 (file)
@@ -973,6 +973,7 @@ class Manager(object):
         self.emittedNoHandlerWarning = 0
         self.loggerDict = {}
         self.loggerClass = None
+        self.logRecordClass = None
 
     def getLogger(self, name):
         """
@@ -1016,6 +1017,13 @@ class Manager(object):
                                 + klass.__name__)
         self.loggerClass = klass
 
+    def setLogRecordClass(self, cls):
+        """
+        Set the class to be used when instantiating a log record with this
+        Manager.
+        """
+        self.logRecordClass = cls
+
     def _fixupParents(self, alogger):
         """
         Ensure that there are either loggers or placeholders all the way
index c5d8bac966c6e1357b6f171c7d9ca6ac008d82e2..ea2ea2eb6750a509e8cd9b670f401c6621d931b4 100644 (file)
@@ -127,7 +127,8 @@ class BaseTest(unittest.TestCase):
         except AttributeError:
             # StringIO.StringIO lacks a reset() method.
             actual_lines = stream.getvalue().splitlines()
-        self.assertEquals(len(actual_lines), len(expected_values))
+        self.assertEquals(len(actual_lines), len(expected_values),
+                          '%s vs. %s' % (actual_lines, expected_values))
         for actual, expected in zip(actual_lines, expected_values):
             match = pat.search(actual)
             if not match:
@@ -1766,6 +1767,44 @@ class ChildLoggerTest(BaseTest):
         self.assertTrue(c2 is c3)
 
 
+class DerivedLogRecord(logging.LogRecord):
+    pass
+
+class LogRecordClassTest(BaseTest):
+
+    def setUp(self):
+        class CheckingFilter(logging.Filter):
+            def __init__(self, cls):
+                self.cls = cls
+
+            def filter(self, record):
+                t = type(record)
+                if t is not self.cls:
+                    msg = 'Unexpected LogRecord type %s, expected %s' % (t,
+                            self.cls)
+                    raise TypeError(msg)
+                return True
+
+        BaseTest.setUp(self)
+        self.filter = CheckingFilter(DerivedLogRecord)
+        self.root_logger.addFilter(self.filter)
+        self.orig_cls = logging.getLogRecordClass()
+
+    def tearDown(self):
+        self.root_logger.removeFilter(self.filter)
+        BaseTest.tearDown(self)
+        logging.setLogRecordClass(self.orig_cls)
+
+    def test_logrecord_class(self):
+        self.assertRaises(TypeError, self.root_logger.warning,
+                          self.next_message())
+        logging.setLogRecordClass(DerivedLogRecord)
+        self.root_logger.error(self.next_message())
+        self.assert_log_lines([
+           ('root', 'ERROR', '2'),
+        ])
+
+
 class QueueHandlerTest(BaseTest):
     # Do not bother with a logger name group.
     expected_log_pat = r"^[\w.]+ -> ([\w]+): ([\d]+)$"
@@ -1877,7 +1916,7 @@ def test_main():
                  CustomLevelsAndFiltersTest, MemoryHandlerTest,
                  ConfigFileTest, SocketHandlerTest, MemoryTest,
                  EncodingTest, WarningsTest, ConfigDictTest, ManagerTest,
-                 ChildLoggerTest, QueueHandlerTest,
+                 LogRecordClassTest, ChildLoggerTest, QueueHandlerTest,
                  RotatingFileHandlerTest,
                  #TimedRotatingFileHandlerTest
                 )
index 066c667095282768d5b1f1682924b6f4dbac8a78..1453453bd341e0089dce61ff72282060a98f2fad 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -34,6 +34,8 @@ Core and Builtins
 Library
 -------
 
+- logging: Added tests for _logRecordClass changes.
+
 - Issue #10092: Properly reset locale in calendar.Locale*Calendar classes.
 
 - logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to