Added a test for the ability to specify a class attribute in Formatter configuration. Contributed by Shane Hathaway.
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index d19c423..5f01247 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -396,7 +396,7 @@
 # Test 4
 #----------------------------------------------------------------------------
 
-# config0 is a standard configuratin.
+# config0 is a standard configuration.
 config0 = """
 [loggers]
 keys=root
@@ -489,6 +489,65 @@
             loggerDict.update(saved_loggers)
 
 #----------------------------------------------------------------------------
+# Test 5
+#----------------------------------------------------------------------------
+
+test5_config = """
+[loggers]
+keys=root
+
+[handlers]
+keys=hand1
+
+[formatters]
+keys=form1
+
+[logger_root]
+level=NOTSET
+handlers=hand1
+
+[handler_hand1]
+class=StreamHandler
+level=NOTSET
+formatter=form1
+args=(sys.stdout,)
+
+[formatter_form1]
+class=test.test_logging.FriendlyFormatter
+format=%(levelname)s:%(name)s:%(message)s
+datefmt=
+"""
+
+class FriendlyFormatter (logging.Formatter):
+    def formatException(self, ei):
+        return "%s... Don't panic!" % str(ei[0])
+
+
+def test5():
+    loggerDict = logging.getLogger().manager.loggerDict
+    saved_handlers = logging._handlers.copy()
+    saved_loggers = loggerDict.copy()
+    try:
+        fn = tempfile.mktemp(".ini")
+        f = open(fn, "w")
+        f.write(test5_config)
+        f.close()
+        logging.config.fileConfig(fn)
+        try:
+            raise KeyError
+        except KeyError:
+            logging.exception("just testing")
+        os.remove(fn)
+    finally:
+        logging._handlers.clear()
+        logging._handlers.update(saved_handlers)
+        loggerDict = logging.getLogger().manager.loggerDict
+        loggerDict.clear()
+        loggerDict.update(saved_loggers)
+
+
+
+#----------------------------------------------------------------------------
 # Test Harness
 #----------------------------------------------------------------------------
 def banner(nm, typ):
@@ -540,21 +599,10 @@
 
         banner("log_test0", "end")
 
-        banner("log_test1", "begin")
-        test1()
-        banner("log_test1", "end")
-
-        banner("log_test2", "begin")
-        test2()
-        banner("log_test2", "end")
-
-        banner("log_test3", "begin")
-        test3()
-        banner("log_test3", "end")
-
-        banner("log_test4", "begin")
-        test4()
-        banner("log_test4", "end")
+        for t in range(1,6):
+            banner("log_test%d" % t, "begin")
+            globals()['test%d' % t]()
+            banner("log_test%d" % t, "end")
 
     finally:
         #wait for TCP receiver to terminate