Skip to content

Commit 66e097e

Browse files
committed
Merge pull request for #32730 from rgoers
Closes gh-32731
2 parents 65109bd + d665441 commit 66e097e

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystem.java

+18
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,10 @@
5858
import org.springframework.boot.logging.LoggingInitializationContext;
5959
import org.springframework.boot.logging.LoggingSystem;
6060
import org.springframework.boot.logging.LoggingSystemFactory;
61+
import org.springframework.core.Conventions;
6162
import org.springframework.core.Ordered;
6263
import org.springframework.core.annotation.Order;
64+
import org.springframework.core.env.Environment;
6365
import org.springframework.util.Assert;
6466
import org.springframework.util.ClassUtils;
6567
import org.springframework.util.CollectionUtils;
@@ -84,6 +86,9 @@ public class Log4J2LoggingSystem extends AbstractLoggingSystem {
8486

8587
private static final String LOG4J_LOG_MANAGER = "org.apache.logging.log4j.jul.LogManager";
8688

89+
static final String ENVIRONMENT_KEY = Conventions.getQualifiedAttributeName(Log4J2LoggingSystem.class,
90+
"environment");
91+
8792
private static final LogLevels<Level> LEVELS = new LogLevels<>();
8893

8994
static {
@@ -227,6 +232,8 @@ public void initialize(LoggingInitializationContext initializationContext, Strin
227232
if (isAlreadyInitialized(loggerContext)) {
228233
return;
229234
}
235+
Environment environment = initializationContext.getEnvironment();
236+
getLoggerContext().putObjectIfAbsent(ENVIRONMENT_KEY, environment);
230237
loggerContext.getConfiguration().removeFilter(FILTER);
231238
super.initialize(initializationContext, configLocation, logFile);
232239
markAsInitialized(loggerContext);
@@ -467,6 +474,17 @@ private void markAsUninitialized(LoggerContext loggerContext) {
467474
loggerContext.setExternalContext(null);
468475
}
469476

477+
/**
478+
* Get the Spring {@link Environment} attached to the given {@link LoggerContext} or
479+
* {@code null} if no environment is available.
480+
* @param loggerContext the logger context
481+
* @return the Spring {@link Environment} or {@code null}
482+
* @since 3.0.0
483+
*/
484+
public static Environment getEnvironment(LoggerContext loggerContext) {
485+
return (Environment) ((loggerContext != null) ? loggerContext.getObject(ENVIRONMENT_KEY) : null);
486+
}
487+
470488
/**
471489
* {@link LoggingSystemFactory} that returns {@link Log4J2LoggingSystem} if possible.
472490
*/

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/log4j2/Log4J2LoggingSystemTests.java

+10
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import org.springframework.boot.testsupport.logging.ConfigureClasspathToPreferLog4j2;
5858
import org.springframework.boot.testsupport.system.CapturedOutput;
5959
import org.springframework.boot.testsupport.system.OutputCaptureExtension;
60+
import org.springframework.core.env.Environment;
6061
import org.springframework.mock.env.MockEnvironment;
6162
import org.springframework.util.ClassUtils;
6263
import org.springframework.util.StringUtils;
@@ -438,6 +439,15 @@ void compositeConfigurationWithStandardConfigLocationConfiguration() {
438439
assertThat(this.loggingSystem.getConfiguration()).isInstanceOf(CompositeConfiguration.class);
439440
}
440441

442+
@Test
443+
void initializeAttachesEnvironmentToLoggerContext() {
444+
this.loggingSystem.beforeInitialize();
445+
this.loggingSystem.initialize(this.initializationContext, null, null);
446+
LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false);
447+
Environment environment = Log4J2LoggingSystem.getEnvironment(loggerContext);
448+
assertThat(environment).isSameAs(this.environment);
449+
}
450+
441451
private String getRelativeClasspathLocation(String fileName) {
442452
String defaultPath = ClassUtils.getPackageName(getClass());
443453
defaultPath = defaultPath.replace('.', '/');

0 commit comments

Comments
 (0)