This is an automated email from the ASF dual-hosted git repository. ckozak pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/master by this push: new 20f9a97 LOG4J2-3054: BasicContextSelector takes the default context into account 20f9a97 is described below commit 20f9a97dbe5928c3b5077bcdd2a22ac92e941655 Author: Carter Kozak <cko...@apache.org> AuthorDate: Tue Mar 23 18:42:13 2021 -0400 LOG4J2-3054: BasicContextSelector takes the default context into account --- .../log4j/core/selector/BasicContextSelector.java | 8 ++-- .../core/selector/BasicContextSelectorTest.java | 50 ++++++++++++++++++++++ src/changes/changes.xml | 3 ++ 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java index aac0221..6aa4dcd 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/BasicContextSelector.java @@ -34,18 +34,20 @@ public class BasicContextSelector implements ContextSelector { @Override public void shutdown(String fqcn, ClassLoader loader, boolean currentContext, boolean allContexts) { - ContextAnchor.THREAD_CONTEXT.get().stop(DEFAULT_STOP_TIMEOUT, TimeUnit.MILLISECONDS); + LoggerContext ctx = getContext(fqcn, loader, currentContext); + if (ctx != null && ctx.isStarted()) { + ctx.stop(DEFAULT_STOP_TIMEOUT, TimeUnit.MILLISECONDS); + } } @Override public boolean hasContext(String fqcn, ClassLoader loader, boolean currentContext) { - LoggerContext ctx = ContextAnchor.THREAD_CONTEXT.get(); + LoggerContext ctx = getContext(fqcn, loader, currentContext); return ctx != null && ctx.isStarted(); } @Override public LoggerContext getContext(final String fqcn, final ClassLoader loader, final boolean currentContext) { - final LoggerContext ctx = ContextAnchor.THREAD_CONTEXT.get(); return ctx != null ? ctx : CONTEXT; } diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/selector/BasicContextSelectorTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/selector/BasicContextSelectorTest.java new file mode 100644 index 0000000..6e35b72 --- /dev/null +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/selector/BasicContextSelectorTest.java @@ -0,0 +1,50 @@ +/* + * 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.selector; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.LifeCycle; +import org.apache.logging.log4j.core.util.Constants; +import org.apache.logging.log4j.core.LoggerContext; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public final class BasicContextSelectorTest { + + + @BeforeClass + public static void beforeClass() { + System.setProperty(Constants.LOG4J_CONTEXT_SELECTOR, + BasicContextSelector.class.getName()); + } + + @AfterClass + public static void afterClass() { + System.clearProperty(Constants.LOG4J_CONTEXT_SELECTOR); + } + + @Test + public void testLogManagerShutdown() { + LoggerContext context = (LoggerContext) LogManager.getContext(); + assertEquals(LifeCycle.State.STARTED, context.getState()); + LogManager.shutdown(); + assertEquals(LifeCycle.State.STOPPED, context.getState()); + } +} \ No newline at end of file diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 5d947bb..8db44d8 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -184,6 +184,9 @@ <action issue="LOG4J2-3041" dev="rgoers" type="update"> Allow a PatternSelector to be specified on GelfLayout. </action> + <action issue="LOG4J2-3054" dev="ckozak" type="fix"> + BasicContextSelector hasContext and shutdown take the default context into account + </action> </release> <release version="2.14.1" date="2021-03-06" description="GA Release 2.14.1"> <!-- FIXES -->