Skip to content

Commit 7ac8758

Browse files
patch: Fix application not starting due to wrong usage of loggerContext (#149)
1 parent 660cb10 commit 7ac8758

File tree

4 files changed

+23
-29
lines changed

4 files changed

+23
-29
lines changed

platform-spring-bom/platform-spring-logging-server-config/src/main/java/com/latch/LengthSplittingAppender.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,6 @@
3434
* SOFTWARE.
3535
*/
3636
public class LengthSplittingAppender extends SplittingAppenderBase<ILoggingEvent> {
37-
private final LoggingEventCloner loggingEventCloner;
38-
39-
public LengthSplittingAppender() {
40-
super();
41-
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
42-
this.loggingEventCloner = new LoggingEventCloner(loggerContext);
43-
}
4437

4538
private int maxLength;
4639
private String sequenceKey;
@@ -76,7 +69,7 @@ public List<ILoggingEvent> split(ILoggingEvent event) {
7669
Map<String, String> seqMDCPropertyMap = new HashMap<>(event.getMDCPropertyMap());
7770
seqMDCPropertyMap.put(getSequenceKey(), Integer.toString(i));
7871

79-
LoggingEvent clonedEvent = loggingEventCloner.clone(event, message, seqMDCPropertyMap);
72+
LoggingEvent clonedEvent = LoggingEventCloner.clone(event, message, seqMDCPropertyMap);
8073

8174
splitLogEvents.add(clonedEvent);
8275
}

platform-spring-bom/platform-spring-logging-server-config/src/main/java/com/latch/LoggingEventCloner.java

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import ch.qos.logback.classic.LoggerContext;
44
import ch.qos.logback.classic.spi.ILoggingEvent;
55
import ch.qos.logback.classic.spi.LoggingEvent;
6+
import org.slf4j.LoggerFactory;
67
import org.slf4j.Marker;
78

89
import java.util.List;
@@ -32,20 +33,16 @@
3233
* SOFTWARE.
3334
*/
3435
class LoggingEventCloner {
35-
private final LoggerContext loggerContext;
36+
private static LoggerContext loggerContext;
3637

37-
public LoggingEventCloner(LoggerContext loggerContext) {
38-
this.loggerContext = loggerContext;
39-
}
40-
41-
public LoggingEvent clone(ILoggingEvent event, String message, Map<String, String> mdcValueMap) {
38+
public static LoggingEvent clone(ILoggingEvent event, String message, Map<String, String> mdcValueMap) {
4239
LoggingEvent newEvent = new LoggingEvent();
4340

4441
newEvent.setLevel(event.getLevel());
4542
newEvent.setLoggerName(event.getLoggerName());
4643
newEvent.setTimeStamp(event.getTimeStamp());
4744
newEvent.setLoggerContextRemoteView(event.getLoggerContextVO());
48-
newEvent.setLoggerContext(this.loggerContext);
45+
newEvent.setLoggerContext(getLoggerContext());
4946
newEvent.setThreadName(event.getThreadName());
5047
newEvent.setMessage(message);
5148
newEvent.setMDCPropertyMap(mdcValueMap);
@@ -61,4 +58,15 @@ public LoggingEvent clone(ILoggingEvent event, String message, Map<String, Strin
6158

6259
return newEvent;
6360
}
61+
62+
/**
63+
* We can't set the logger context directly because that would cause issues if the logger context is not initialized yet.
64+
*/
65+
private static LoggerContext getLoggerContext() {
66+
if (loggerContext == null) {
67+
loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
68+
}
69+
70+
return loggerContext;
71+
}
6472
}

platform-spring-bom/platform-spring-logging-server-config/src/test/java/com/latch/LoggingEventClonerTest.java

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,6 @@
1313
import java.util.Map;
1414

1515
public class LoggingEventClonerTest {
16-
private final LoggerContext loggerContext;
17-
private final LoggingEventCloner loggingEventCloner;
18-
19-
public LoggingEventClonerTest() {
20-
this.loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
21-
this.loggingEventCloner = new LoggingEventCloner(loggerContext);
22-
}
23-
2416
@Test
2517
public void correctlyClonesBasicEventProperties() {
2618
LoggingEvent event = createLoggingEventWithContext();
@@ -29,7 +21,7 @@ public void correctlyClonesBasicEventProperties() {
2921
event.setThreadName("testThread");
3022
event.setTimeStamp(System.currentTimeMillis());
3123

32-
LoggingEvent clonedEvent = loggingEventCloner.clone(event, "", Collections.emptyMap());
24+
LoggingEvent clonedEvent = LoggingEventCloner.clone(event, "", Collections.emptyMap());
3325

3426
Assertions.assertNotNull(clonedEvent);
3527
Assertions.assertEquals(event.getLevel(), clonedEvent.getLevel());
@@ -43,7 +35,7 @@ public void correctlyClonesMessage() {
4335
LoggingEvent event = createLoggingEventWithContext();
4436
String message = "Test message";
4537

46-
LoggingEvent clonedEvent = loggingEventCloner.clone(event, message, Collections.emptyMap());
38+
LoggingEvent clonedEvent = LoggingEventCloner.clone(event, message, Collections.emptyMap());
4739

4840
Assertions.assertNotNull(clonedEvent);
4941
Assertions.assertEquals(message, clonedEvent.getMessage());
@@ -54,7 +46,7 @@ public void correctlyClonesMDCProperties() {
5446
LoggingEvent event = createLoggingEventWithContext();
5547
Map<String, String> mdcProperties = Map.of("key1", "value1", "key2", "value2");
5648

57-
LoggingEvent clonedEvent = loggingEventCloner.clone(event, "", mdcProperties);
49+
LoggingEvent clonedEvent = LoggingEventCloner.clone(event, "", mdcProperties);
5850

5951
Assertions.assertNotNull(clonedEvent);
6052
Map<String, String> clonedMDCProperties = clonedEvent.getMDCPropertyMap();
@@ -69,7 +61,7 @@ public void correctlyClonesMarker() {
6961
Marker marker = new BasicMarkerFactory().getMarker("TestMarker");
7062
event.addMarker(marker);
7163

72-
LoggingEvent clonedEvent = loggingEventCloner.clone(event, "", Collections.emptyMap());
64+
LoggingEvent clonedEvent = LoggingEventCloner.clone(event, "", Collections.emptyMap());
7365

7466
Assertions.assertNotNull(clonedEvent);
7567
Assertions.assertEquals(marker.getName(), clonedEvent.getMarkerList().get(0).getName());
@@ -83,7 +75,7 @@ public void correctlyClonesCallerData() {
8375
};
8476
event.setCallerData(callerData);
8577

86-
LoggingEvent clonedEvent = loggingEventCloner.clone(event, "", Collections.emptyMap());
78+
LoggingEvent clonedEvent = LoggingEventCloner.clone(event, "", Collections.emptyMap());
8779

8880
Assertions.assertTrue(clonedEvent.hasCallerData());
8981
StackTraceElement[] clonedCallerData = clonedEvent.getCallerData();
@@ -93,6 +85,7 @@ public void correctlyClonesCallerData() {
9385

9486
private LoggingEvent createLoggingEventWithContext() {
9587
LoggingEvent event = new LoggingEvent();
88+
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
9689
event.setLoggerContext(loggerContext);
9790
return event;
9891
}

platform-spring-bom/platform-spring-logging-server-config/src/test/java/io/cloudflight/platform/spring/logging/LoggingJsonSplitterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ void logWithCloudbackConfig() {
4949
}
5050

5151
@Test
52-
void logLongMessageWithJsonSplitterFails() {
52+
void logLongMessageWithJsonSplitterDoesNotFail() {
5353
Assertions.assertDoesNotThrow(() -> LOG.info(TEST_MARKER, "This is a long message. ".repeat(1000)));
5454
}
5555
}

0 commit comments

Comments
 (0)