logging: Added tests for _logRecordClass changes.
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 0c6a186..995d313 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -973,6 +973,7 @@
         self.emittedNoHandlerWarning = 0
         self.loggerDict = {}
         self.loggerClass = None
+        self.logRecordClass = None
 
     def getLogger(self, name):
         """
@@ -1016,6 +1017,13 @@
                                 + 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
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index c5d8bac..ea2ea2e 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -127,7 +127,8 @@
         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 @@
         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 @@
                  CustomLevelsAndFiltersTest, MemoryHandlerTest,
                  ConfigFileTest, SocketHandlerTest, MemoryTest,
                  EncodingTest, WarningsTest, ConfigDictTest, ManagerTest,
-                 ChildLoggerTest, QueueHandlerTest,
+                 LogRecordClassTest, ChildLoggerTest, QueueHandlerTest,
                  RotatingFileHandlerTest,
                  #TimedRotatingFileHandlerTest
                 )
diff --git a/Misc/NEWS b/Misc/NEWS
index 066c667..1453453 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -34,6 +34,8 @@
 Library
 -------
 
+- logging: Added tests for _logRecordClass changes.
+
 - Issue #10092: Properly reset locale in calendar.Locale*Calendar classes.
 
 - logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to