diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java
index 446d57b..cea22d6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java
@@ -150,9 +150,7 @@
         try {
             strLookupMap.put(LOOKUP_KEY_KUBERNETES,
                     Loader.newCheckedInstanceOf("org.apache.logging.log4j.kubernetes.KubernetesLookup", StrLookup.class));
-        } catch (final Exception ignored) {
-            handleError(LOOKUP_KEY_KUBERNETES, ignored);
-        } catch (final NoClassDefFoundError error) {
+        } catch (final Exception | NoClassDefFoundError error) {
             handleError(LOOKUP_KEY_KUBERNETES, error);
         }
     }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java
index a82aa1f..f3e869f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/AbstractStyleNameConverter.java
@@ -331,17 +331,8 @@
         try {
             final Constructor<T> constructor = asnConverterClass.getConstructor(List.class, String.class);
             return constructor.newInstance(formatters, AnsiEscape.createSequence(name));
-        } catch (final SecurityException e) {
-            LOGGER.error(e.toString(), e);
-        } catch (final NoSuchMethodException e) {
-            LOGGER.error(e.toString(), e);
-        } catch (final IllegalArgumentException e) {
-            LOGGER.error(e.toString(), e);
-        } catch (final InstantiationException e) {
-            LOGGER.error(e.toString(), e);
-        } catch (final IllegalAccessException e) {
-            LOGGER.error(e.toString(), e);
-        } catch (final InvocationTargetException e) {
+        } catch (final SecurityException | NoSuchMethodException | IllegalArgumentException | InstantiationException
+                | IllegalAccessException | InvocationTargetException e) {
             LOGGER.error(e.toString(), e);
         }
         return null;
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/ssl/SslConfigurationTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/ssl/SslConfigurationTest.java
index fa0a35f..7b62845 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/net/ssl/SslConfigurationTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/net/ssl/SslConfigurationTest.java
@@ -87,7 +87,8 @@
 
     @Test
     public void equals() {
-        assertEquals(SslConfiguration.createSSLConfiguration(null, null, null), SslConfiguration.createSSLConfiguration(null, null, null));
+        assertEquals(SslConfiguration.createSSLConfiguration(null, null, null),
+                SslConfiguration.createSSLConfiguration(null, null, null));
     }
 
     @Test
@@ -105,9 +106,7 @@
             try (final SSLSocket clientSocket = (SSLSocket) factory.createSocket(TLS_TEST_HOST, TLS_TEST_PORT)) {
                 assertNotNull(clientSocket);
             }
-        } catch (final UnknownHostException offline) {
-            // this exception is thrown on Windows when offline
-        } catch (final ConnectException connectionTimeout) {
+        } catch (final UnknownHostException | ConnectException connectionTimeout) {
             // this exception is thrown on Windows when host is behind a proxy that does not allow connection to external network
         }
     }
@@ -124,9 +123,7 @@
                     assertThrows(IOException.class, () -> os.write("GET config/login_verify2?".getBytes()));
                 }
             }
-        } catch (final UnknownHostException offline) {
-            // this exception is thrown on Windows when offline
-        } catch (final ConnectException connectionTimeout) {
+        } catch (final UnknownHostException | ConnectException connectionTimeout) {
             // this exception is thrown on Windows when host is behind a proxy that does not allow connection to external network
         }
     }
diff --git a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/processor/PluginProcessor.java b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/processor/PluginProcessor.java
index 6ccfdd2..d655416 100644
--- a/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/processor/PluginProcessor.java
+++ b/log4j-plugins/src/main/java/org/apache/logging/log4j/plugins/processor/PluginProcessor.java
@@ -92,10 +92,6 @@
             writeServiceFile(packageName);
             messager.printMessage(Kind.NOTE, "Annotations processed");
             return true;
-        } catch (final IOException e) {
-            e.printStackTrace();
-            error(e.getMessage());
-            return false;
         } catch (final Exception ex) {
             ex.printStackTrace();
             error(ex.getMessage());
