You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2021/03/28 23:10:21 UTC
[logging-log4j2] 02/06: LOG4J2-3054: BasicContextSelector takes the
default context into account
This is an automated email from the ASF dual-hosted git repository.
rgoers pushed a commit to branch master-java11
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit d02f446bbd8a3606084885cf67fc374d68d3328a
Author: Carter Kozak <ck...@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 -->