StructuredLogEncoder Class — spring-boot Architecture
Architecture documentation for the StructuredLogEncoder class in StructuredLogEncoder.java from the spring-boot codebase.
Entity Profile
Relationship Graph
Source Code
core/spring-boot/src/main/java/org/springframework/boot/logging/logback/StructuredLogEncoder.java lines 48–156
public class StructuredLogEncoder extends EncoderBase<ILoggingEvent> {
private final ThrowableProxyConverter throwableProxyConverter = new ThrowableProxyConverter();
private @Nullable String format;
private @Nullable StructuredLogFormatter<ILoggingEvent> formatter;
private @Nullable Charset charset = StandardCharsets.UTF_8;
public void setFormat(String format) {
this.format = format;
}
public void setCharset(@Nullable Charset charset) {
this.charset = charset;
}
@Override
public void start() {
Assert.state(this.format != null, "Format has not been set");
this.formatter = createFormatter(this.format);
super.start();
this.throwableProxyConverter.start();
}
private StructuredLogFormatter<ILoggingEvent> createFormatter(String format) {
Environment environment = (Environment) getContext().getObject(Environment.class.getName());
Assert.state(environment != null, "Unable to find Spring Environment in logger context");
return new StructuredLogFormatterFactory<>(ILoggingEvent.class, environment, this::addAvailableParameters,
this::addCommonFormatters)
.get(format);
}
private void addAvailableParameters(AvailableParameters availableParameters) {
availableParameters.add(ThrowableProxyConverter.class, this.throwableProxyConverter);
}
private void addCommonFormatters(CommonFormatters<ILoggingEvent> commonFormatters) {
commonFormatters.add(CommonStructuredLogFormat.ELASTIC_COMMON_SCHEMA, this::createEcsFormatter);
commonFormatters.add(CommonStructuredLogFormat.GRAYLOG_EXTENDED_LOG_FORMAT, this::createGraylogFormatter);
commonFormatters.add(CommonStructuredLogFormat.LOGSTASH, this::createLogstashFormatter);
}
private StructuredLogFormatter<ILoggingEvent> createEcsFormatter(Instantiator<?> instantiator) {
Environment environment = instantiator.getArg(Environment.class);
StackTracePrinter stackTracePrinter = instantiator.getArg(StackTracePrinter.class);
ContextPairs contextPairs = instantiator.getArg(ContextPairs.class);
ThrowableProxyConverter throwableProxyConverter = instantiator.getArg(ThrowableProxyConverter.class);
StructuredLoggingJsonMembersCustomizer.Builder<?> jsonMembersCustomizerBuilder = instantiator
.getArg(StructuredLoggingJsonMembersCustomizer.Builder.class);
Assert.state(environment != null, "'environment' must not be null");
Assert.state(contextPairs != null, "'contextPairs' must not be null");
Assert.state(throwableProxyConverter != null, "'throwableProxyConverter' must not be null");
Assert.state(jsonMembersCustomizerBuilder != null, "'jsonMembersCustomizerBuilder' must not be null");
return new ElasticCommonSchemaStructuredLogFormatter(environment, stackTracePrinter, contextPairs,
throwableProxyConverter, jsonMembersCustomizerBuilder);
}
private StructuredLogFormatter<ILoggingEvent> createGraylogFormatter(Instantiator<?> instantiator) {
Environment environment = instantiator.getArg(Environment.class);
StackTracePrinter stackTracePrinter = instantiator.getArg(StackTracePrinter.class);
ContextPairs contextPairs = instantiator.getArg(ContextPairs.class);
ThrowableProxyConverter throwableProxyConverter = instantiator.getArg(ThrowableProxyConverter.class);
StructuredLoggingJsonMembersCustomizer<?> jsonMembersCustomizer = instantiator
.getArg(StructuredLoggingJsonMembersCustomizer.class);
Assert.state(environment != null, "'environment' must not be null");
Assert.state(contextPairs != null, "'contextPairs' must not be null");
Assert.state(throwableProxyConverter != null, "'throwableProxyConverter' must not be null");
return new GraylogExtendedLogFormatStructuredLogFormatter(environment, stackTracePrinter, contextPairs,
throwableProxyConverter, jsonMembersCustomizer);
}
private StructuredLogFormatter<ILoggingEvent> createLogstashFormatter(Instantiator<?> instantiator) {
StackTracePrinter stackTracePrinter = instantiator.getArg(StackTracePrinter.class);
ContextPairs contextPairs = instantiator.getArg(ContextPairs.class);
ThrowableProxyConverter throwableProxyConverter = instantiator.getArg(ThrowableProxyConverter.class);
StructuredLoggingJsonMembersCustomizer<?> jsonMembersCustomizer = instantiator
.getArg(StructuredLoggingJsonMembersCustomizer.class);
Assert.state(contextPairs != null, "'contextPairs' must not be null");
Assert.state(throwableProxyConverter != null, "'throwableProxyConverter' must not be null");
return new LogstashStructuredLogFormatter(stackTracePrinter, contextPairs, throwableProxyConverter,
jsonMembersCustomizer);
}
@Override
public void stop() {
this.throwableProxyConverter.stop();
super.stop();
}
@Override
public byte @Nullable [] headerBytes() {
return null;
}
@Override
public byte[] encode(ILoggingEvent event) {
Assert.state(this.formatter != null,
"formatter must not be null. Make sure to call start() before this method");
return this.formatter.formatAsBytes(event, (this.charset != null) ? this.charset : StandardCharsets.UTF_8);
}
@Override
public byte @Nullable [] footerBytes() {
return null;
}
}
Domain
Source
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free