diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index 86a1e4eaf4cbc9..10a4f749c1568c 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -647,6 +647,9 @@ def configure(self):
 
     def configure_formatter(self, config):
         """Configure a formatter from a dictionary."""
+        if isinstance(config, logging.Formatter):
+            return config
+
         if '()' in config:
             factory = config['()'] # for use in exception handler
             try:
@@ -683,6 +686,9 @@ def configure_formatter(self, config):
 
     def configure_filter(self, config):
         """Configure a filter from a dictionary."""
+        if isinstance(config, logging.Filter):
+            return config
+
         if '()' in config:
             result = self.configure_custom(config)
         else:
@@ -744,7 +750,7 @@ def configure_handler(self, config):
         props = config.pop('.', None)
         kwargs = {k: config[k] for k in config if valid_ident(k)}
         try:
-            result = factory(**kwargs)
+            result = factory(**kwargs) if not isinstance(factory, logging.Handler) else factory
         except TypeError as te:
             if "'stream'" not in str(te):
                 raise
diff --git a/Misc/NEWS.d/next/Library/2022-05-24-11-26-31.gh-issue-93162.3YuOur.rst b/Misc/NEWS.d/next/Library/2022-05-24-11-26-31.gh-issue-93162.3YuOur.rst
new file mode 100644
index 00000000000000..000767c73a7a6c
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-05-24-11-26-31.gh-issue-93162.3YuOur.rst
@@ -0,0 +1 @@
+Allow passing instances of logging objects to logging.dictConfig