Skip to content

Commit b5416dc

Browse files
committed
Let logging.structured.json.customizer accept multiple Customizers also
See #43312 (comment)
1 parent 3ddfd62 commit b5416dc

File tree

4 files changed

+43
-5
lines changed

4 files changed

+43
-5
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/structured/StructuredLoggingJsonProperties.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.logging.structured;
1818

19+
import java.util.List;
1920
import java.util.Map;
2021
import java.util.Set;
2122

@@ -32,9 +33,10 @@
3233
* @param customizer the fully qualified name of a
3334
* {@link StructuredLoggingJsonMembersCustomizer}
3435
* @author Phillip Webb
36+
* @author Yanming Zhou
3537
*/
3638
record StructuredLoggingJsonProperties(Set<String> include, Set<String> exclude, Map<String, String> rename,
37-
Map<String, String> add, Class<? extends StructuredLoggingJsonMembersCustomizer<?>> customizer) {
39+
Map<String, String> add, List<Class<? extends StructuredLoggingJsonMembersCustomizer<?>>> customizer) {
3840

3941
static StructuredLoggingJsonProperties get(Environment environment) {
4042
return Binder.get(environment)

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/logging/structured/StructuredLoggingJsonPropertiesJsonMembersCustomizer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.logging.structured;
1818

19+
import java.util.List;
1920
import java.util.Map;
2021

2122
import org.springframework.boot.json.JsonWriter.MemberPath;
@@ -28,6 +29,7 @@
2829
* {@link StructuredLoggingJsonProperties}.
2930
*
3031
* @author Phillip Webb
32+
* @author Yanming Zhou
3133
*/
3234
class StructuredLoggingJsonPropertiesJsonMembersCustomizer implements StructuredLoggingJsonMembersCustomizer<Object> {
3335

@@ -49,9 +51,9 @@ public void customize(Members<Object> members) {
4951
if (!CollectionUtils.isEmpty(add)) {
5052
add.forEach(members::add);
5153
}
52-
Class<? extends StructuredLoggingJsonMembersCustomizer<?>> customizer = this.properties.customizer();
54+
List<Class<? extends StructuredLoggingJsonMembersCustomizer<?>>> customizer = this.properties.customizer();
5355
if (customizer != null) {
54-
createAndApplyCustomizer(members, customizer);
56+
customizer.forEach((c) -> createAndApplyCustomizer(members, c));
5557
}
5658
}
5759

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/structured/StructuredLoggingJsonPropertiesJsonMembersCustomizerTests.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.logging.structured;
1818

1919
import java.util.Collections;
20+
import java.util.List;
2021
import java.util.Map;
2122
import java.util.Set;
2223

@@ -37,6 +38,7 @@
3738
* Tests for {@link StructuredLoggingJsonPropertiesJsonMembersCustomizer}.
3839
*
3940
* @author Phillip Webb
41+
* @author Yanming Zhou
4042
*/
4143
@ExtendWith(MockitoExtension.class)
4244
class StructuredLoggingJsonPropertiesJsonMembersCustomizerTests {
@@ -102,12 +104,25 @@ void customizeWhenHasCustomizerCustomizesMember() {
102104
.applyingNameProcessor(NameProcessor.of(String::toUpperCase));
103105
given(((Instantiator) this.instantiator).instantiateType(TestCustomizer.class)).willReturn(uppercaseCustomizer);
104106
StructuredLoggingJsonProperties properties = new StructuredLoggingJsonProperties(Collections.emptySet(),
105-
Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(), TestCustomizer.class);
107+
Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(), List.of(TestCustomizer.class));
106108
StructuredLoggingJsonPropertiesJsonMembersCustomizer customizer = new StructuredLoggingJsonPropertiesJsonMembersCustomizer(
107109
this.instantiator, properties);
108110
assertThat(writeSampleJson(customizer)).contains("\"A\":\"a\"");
109111
}
110112

113+
@Test
114+
@SuppressWarnings({ "rawtypes", "unchecked" })
115+
void multipleCustomizers() {
116+
given(((Instantiator) this.instantiator).instantiateType(FooCustomizer.class)).willReturn(new FooCustomizer());
117+
given(((Instantiator) this.instantiator).instantiateType(BarCustomizer.class)).willReturn(new BarCustomizer());
118+
StructuredLoggingJsonProperties properties = new StructuredLoggingJsonProperties(Collections.emptySet(),
119+
Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(),
120+
List.of(FooCustomizer.class, BarCustomizer.class));
121+
StructuredLoggingJsonPropertiesJsonMembersCustomizer customizer = new StructuredLoggingJsonPropertiesJsonMembersCustomizer(
122+
this.instantiator, properties);
123+
assertThat(writeSampleJson(customizer)).contains("\"foo\":\"foo\"").contains("\"bar\":\"bar\"");
124+
}
125+
111126
@SuppressWarnings({ "rawtypes", "unchecked" })
112127
private String writeSampleJson(StructuredLoggingJsonMembersCustomizer customizer) {
113128
return JsonWriter.of((members) -> {
@@ -126,4 +141,22 @@ public void customize(Members<String> members) {
126141

127142
}
128143

144+
static class FooCustomizer implements StructuredLoggingJsonMembersCustomizer<String> {
145+
146+
@Override
147+
public void customize(Members<String> members) {
148+
members.add("foo", "foo");
149+
}
150+
151+
}
152+
153+
static class BarCustomizer implements StructuredLoggingJsonMembersCustomizer<String> {
154+
155+
@Override
156+
public void customize(Members<String> members) {
157+
members.add("bar", "bar");
158+
}
159+
160+
}
161+
129162
}

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/logging/structured/StructuredLoggingJsonPropertiesTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package org.springframework.boot.logging.structured;
1818

19+
import java.util.List;
1920
import java.util.Map;
2021
import java.util.Set;
2122

@@ -43,7 +44,7 @@ void getBindsFromEnvironment() {
4344
environment.setProperty("logging.structured.json.customizer", TestCustomizer.class.getName());
4445
StructuredLoggingJsonProperties properties = StructuredLoggingJsonProperties.get(environment);
4546
assertThat(properties).isEqualTo(new StructuredLoggingJsonProperties(Set.of("a", "b"), Set.of("c", "d"),
46-
Map.of("e", "f"), Map.of("g", "h"), TestCustomizer.class));
47+
Map.of("e", "f"), Map.of("g", "h"), List.of(TestCustomizer.class)));
4748
}
4849

4950
@Test

0 commit comments

Comments
 (0)