From 1e78cc35e596a6927a6ae25418c5f043ee8c40aa Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 9 Nov 2023 11:46:22 +0100 Subject: [PATCH] Log4jLog re-resolves ExtendedLogger on deserialization This is necessary for compatibility with Log4J 2.21, analogous to the existing re-resolution in Spring's SLF4J adapter. Closes gh-31582 --- .../main/java/org/apache/commons/logging/LogAdapter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java b/spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java index 49b47054db..021295d2dc 100644 --- a/spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java +++ b/spring-jcl/src/main/java/org/apache/commons/logging/LogAdapter.java @@ -145,9 +145,12 @@ final class LogAdapter { private static final LoggerContext loggerContext = LogManager.getContext(Log4jLog.class.getClassLoader(), false); - private final ExtendedLogger logger; + private final String name; + + private final transient ExtendedLogger logger; public Log4jLog(String name) { + this.name = name; LoggerContext context = loggerContext; if (context == null) { // Circular call in early-init scenario -> static field not initialized yet @@ -261,6 +264,10 @@ final class LogAdapter { this.logger.logIfEnabled(FQCN, level, null, message, exception); } } + + protected Object readResolve() { + return new Log4jLog(this.name); + } }