diff --git a/core/spring-boot/src/main/java/org/springframework/boot/logging/logback/ElasticCommonSchemaStructuredLogFormatter.java b/core/spring-boot/src/main/java/org/springframework/boot/logging/logback/ElasticCommonSchemaStructuredLogFormatter.java index 0aa703ed98b..aa4fb77379e 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/logging/logback/ElasticCommonSchemaStructuredLogFormatter.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/logging/logback/ElasticCommonSchemaStructuredLogFormatter.java @@ -100,6 +100,7 @@ class ElasticCommonSchemaStructuredLogFormatter extends JsonWriterStructuredLogF return result; } + @SuppressWarnings("deprecation") private static void addMarkers(Set result, Iterator iterator) { while (iterator.hasNext()) { Marker marker = iterator.next(); diff --git a/core/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogstashStructuredLogFormatter.java b/core/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogstashStructuredLogFormatter.java index d4927b0c4a8..9ff822d3673 100644 --- a/core/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogstashStructuredLogFormatter.java +++ b/core/spring-boot/src/main/java/org/springframework/boot/logging/logback/LogstashStructuredLogFormatter.java @@ -93,6 +93,7 @@ class LogstashStructuredLogFormatter extends JsonWriterStructuredLogFormatter result, Iterator iterator) { while (iterator.hasNext()) { Marker marker = iterator.next(); diff --git a/core/spring-boot/src/test/java/org/springframework/boot/logging/logback/ElasticCommonSchemaStructuredLogFormatterTests.java b/core/spring-boot/src/test/java/org/springframework/boot/logging/logback/ElasticCommonSchemaStructuredLogFormatterTests.java index 529e3606d88..2264c12ff62 100644 --- a/core/spring-boot/src/test/java/org/springframework/boot/logging/logback/ElasticCommonSchemaStructuredLogFormatterTests.java +++ b/core/spring-boot/src/test/java/org/springframework/boot/logging/logback/ElasticCommonSchemaStructuredLogFormatterTests.java @@ -134,6 +134,19 @@ class ElasticCommonSchemaStructuredLogFormatterTests extends AbstractStructuredL @Test void shouldFormatMarkersAsTags() { + LoggingEvent event = createEvent(); + event.setMDCPropertyMap(Collections.emptyMap()); + event.addMarker(MarkerFactory.getDetachedMarker("marker-1")); + event.addMarker(MarkerFactory.getDetachedMarker("marker-2")); + event.addMarker(MarkerFactory.getDetachedMarker("marker-3")); + String json = this.formatter.format(event); + Map deserialized = deserialize(json); + assertThat(deserialized.get("tags")).isEqualTo(List.of("marker-1", "marker-2", "marker-3")); + } + + @Test + @SuppressWarnings("deprecation") + void shouldFormatNestedMarkersAsTags() { LoggingEvent event = createEvent(); event.setMDCPropertyMap(Collections.emptyMap()); Marker parent = MarkerFactory.getDetachedMarker("parent"); diff --git a/core/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogstashStructuredLogFormatterTests.java b/core/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogstashStructuredLogFormatterTests.java index 835b1ad07a4..dd74b366128 100644 --- a/core/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogstashStructuredLogFormatterTests.java +++ b/core/spring-boot/src/test/java/org/springframework/boot/logging/logback/LogstashStructuredLogFormatterTests.java @@ -62,6 +62,23 @@ class LogstashStructuredLogFormatterTests extends AbstractStructuredLoggingTests LoggingEvent event = createEvent(); event.setMDCPropertyMap(Map.of("mdc-1", "mdc-v-1")); event.setKeyValuePairs(keyValuePairs("kv-1", "kv-v-1")); + event.addMarker(getMarker("marker-1")); + event.addMarker(getMarker("marker-2")); + String json = this.formatter.format(event); + assertThat(json).endsWith("\n"); + Map deserialized = deserialize(json); + String timestamp = DateTimeFormatter.ISO_OFFSET_DATE_TIME + .format(OffsetDateTime.ofInstant(EVENT_TIME, ZoneId.systemDefault())); + assertThat(deserialized).containsExactlyInAnyOrderEntriesOf(map("@timestamp", timestamp, "@version", "1", + "message", "message", "logger_name", "org.example.Test", "thread_name", "main", "level", "INFO", + "level_value", 20000, "mdc-1", "mdc-v-1", "kv-1", "kv-v-1", "tags", List.of("marker-1", "marker-2"))); + } + + @Test + @SuppressWarnings("deprecation") + void shouldFormatWithNestedMarker() { + LoggingEvent event = createEvent(); + event.setMDCPropertyMap(Map.of("mdc-1", "mdc-v-1")); Marker marker1 = getMarker("marker-1"); marker1.add(getMarker("marker-2")); event.addMarker(marker1); @@ -72,7 +89,7 @@ class LogstashStructuredLogFormatterTests extends AbstractStructuredLoggingTests .format(OffsetDateTime.ofInstant(EVENT_TIME, ZoneId.systemDefault())); assertThat(deserialized).containsExactlyInAnyOrderEntriesOf(map("@timestamp", timestamp, "@version", "1", "message", "message", "logger_name", "org.example.Test", "thread_name", "main", "level", "INFO", - "level_value", 20000, "mdc-1", "mdc-v-1", "kv-1", "kv-v-1", "tags", List.of("marker-1", "marker-2"))); + "level_value", 20000, "mdc-1", "mdc-v-1", "tags", List.of("marker-1", "marker-2"))); } @Test diff --git a/platform/spring-boot-dependencies/build.gradle b/platform/spring-boot-dependencies/build.gradle index c93cdde679c..7c5a2082382 100644 --- a/platform/spring-boot-dependencies/build.gradle +++ b/platform/spring-boot-dependencies/build.gradle @@ -2479,7 +2479,7 @@ bom { releaseNotes("https://github.com/sendgrid/sendgrid-java/releases/tag/{version}") } } - library("SLF4J", "2.0.18") { + library("SLF4J", "2.0.20") { prohibit { contains "-alpha" because "we don't want alphas"