This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 0c4861f7464f1d6286699719bf0996585243834f
Author: Matt Sicker <[email protected]>
AuthorDate: Fri May 27 00:04:19 2022 -0500

    Add JUnit 5 parameter resolver for Logger
    
    Signed-off-by: Matt Sicker <[email protected]>
---
 .../log4j/core/test/junit/LoggerContextSource.java |  3 ++
 .../log4j/core/test/junit/LoggerResolver.java      | 55 ++++++++++++++++++++++
 2 files changed, 58 insertions(+)

diff --git 
a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
 
b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
index 73fa2dd573..6e4bdef993 100644
--- 
a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
+++ 
b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextSource.java
@@ -18,6 +18,7 @@
 package org.apache.logging.log4j.core.test.junit;
 
 import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.junit.jupiter.api.Tag;
@@ -40,6 +41,7 @@ import java.util.concurrent.TimeUnit;
  * <ul>
  *     <li>{@link LoggerContext};</li>
  *     <li>{@link Configuration};</li>
+ *     <li>{@link Logger} (with a {@link Named} annotation to use a different 
Logger than the test class;</li>
  *     <li>any subclass of {@link Appender} paired with a {@link Named} 
annotation to select the appender by name.</li>
  * </ul>
  *
@@ -56,6 +58,7 @@ import java.util.concurrent.TimeUnit;
 @ExtendWith(LoggerContextResolver.class)
 @ExtendWith(ConfigurationResolver.class)
 @ExtendWith(AppenderResolver.class)
+@ExtendWith(LoggerResolver.class)
 public @interface LoggerContextSource {
     /**
      * Specifies the name of the configuration file to use for the annotated 
test.
diff --git 
a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerResolver.java
 
b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerResolver.java
new file mode 100644
index 0000000000..b31d26d333
--- /dev/null
+++ 
b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerResolver.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+
+package org.apache.logging.log4j.core.test.junit;
+
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.plugins.di.Keys;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ParameterContext;
+import org.junit.jupiter.api.extension.ParameterResolutionException;
+import org.junit.jupiter.api.extension.ParameterResolver;
+
+import java.lang.reflect.Parameter;
+
+import static 
org.apache.logging.log4j.core.test.junit.LoggerContextResolver.getParameterLoggerContext;
+
+class LoggerResolver implements ParameterResolver {
+    @Override
+    public boolean supportsParameter(final ParameterContext parameterContext, 
final ExtensionContext extensionContext)
+            throws ParameterResolutionException {
+        return 
parameterContext.getParameter().getType().isAssignableFrom(Logger.class);
+    }
+
+    @Override
+    public Logger resolveParameter(final ParameterContext parameterContext, 
final ExtensionContext extensionContext)
+            throws ParameterResolutionException {
+        final LoggerContext loggerContext = 
getParameterLoggerContext(parameterContext, extensionContext);
+        if (loggerContext == null) {
+            throw new ParameterResolutionException("No LoggerContext defined");
+        }
+        final String loggerName;
+        final Parameter parameter = parameterContext.getParameter();
+        if (Keys.hasName(parameter)) {
+            loggerName = Keys.getName(parameter);
+        } else {
+            loggerName = 
extensionContext.getRequiredTestClass().getCanonicalName();
+        }
+        return loggerContext.getLogger(loggerName);
+    }
+}

Reply via email to