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); + } +}
