Home / Class/ StructuredLogLayout Class — spring-boot Architecture

StructuredLogLayout Class — spring-boot Architecture

Architecture documentation for the StructuredLogLayout class in StructuredLogLayout.java from the spring-boot codebase.

Entity Profile

Relationship Graph

Source Code

core/spring-boot/src/main/java/org/springframework/boot/logging/log4j2/StructuredLogLayout.java lines 50–153

@Plugin(name = "StructuredLogLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE)
final class StructuredLogLayout extends AbstractStringLayout {

	private final StructuredLogFormatter<LogEvent> formatter;

	private StructuredLogLayout(Charset charset, StructuredLogFormatter<LogEvent> formatter) {
		super(charset);
		Assert.notNull(formatter, "'formatter' must not be null");
		this.formatter = formatter;
	}

	@Override
	public String toSerializable(LogEvent event) {
		return this.formatter.format(event);
	}

	@Override
	public byte[] toByteArray(LogEvent event) {
		return this.formatter.formatAsBytes(event, (getCharset() != null) ? getCharset() : StandardCharsets.UTF_8);
	}

	@PluginBuilderFactory
	static StructuredLogLayout.Builder newBuilder() {
		return new StructuredLogLayout.Builder();
	}

	static final class Builder implements org.apache.logging.log4j.core.util.Builder<StructuredLogLayout> {

		@PluginLoggerContext
		@SuppressWarnings("NullAway.Init")
		private LoggerContext loggerContext;

		@PluginBuilderAttribute
		@SuppressWarnings("NullAway.Init")
		private String format;

		@PluginBuilderAttribute
		@SuppressWarnings("NullAway.Init")
		private String charset = StandardCharsets.UTF_8.name();

		public Builder setFormat(String format) {
			this.format = format;
			return this;
		}

		public Builder setCharset(String charset) {
			this.charset = charset;
			return this;
		}

		@Override
		public StructuredLogLayout build() {
			Charset charset = Charset.forName(this.charset);
			Environment environment = Log4J2LoggingSystem.getEnvironment(this.loggerContext);
			Assert.state(environment != null, "Unable to find Spring Environment in logger context");
			StructuredLogFormatter<LogEvent> formatter = new StructuredLogFormatterFactory<>(LogEvent.class,
					environment, null, this::addCommonFormatters)
				.get(this.format);
			return new StructuredLogLayout(charset, formatter);
		}

		private void addCommonFormatters(CommonFormatters<LogEvent> 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 ElasticCommonSchemaStructuredLogFormatter createEcsFormatter(Instantiator<?> instantiator) {
			Environment environment = instantiator.getArg(Environment.class);
			StackTracePrinter stackTracePrinter = instantiator.getArg(StackTracePrinter.class);
			ContextPairs contextPairs = instantiator.getArg(ContextPairs.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(jsonMembersCustomizerBuilder != null, "'jsonMembersCustomizerBuilder' must not be null");
			return new ElasticCommonSchemaStructuredLogFormatter(environment, stackTracePrinter, contextPairs,
					jsonMembersCustomizerBuilder);
		}

		private GraylogExtendedLogFormatStructuredLogFormatter createGraylogFormatter(Instantiator<?> instantiator) {
			Environment environment = instantiator.getArg(Environment.class);
			StackTracePrinter stackTracePrinter = instantiator.getArg(StackTracePrinter.class);
			ContextPairs contextPairs = instantiator.getArg(ContextPairs.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");
			return new GraylogExtendedLogFormatStructuredLogFormatter(environment, stackTracePrinter, contextPairs,
					jsonMembersCustomizer);
		}

		private LogstashStructuredLogFormatter createLogstashFormatter(Instantiator<?> instantiator) {
			StackTracePrinter stackTracePrinter = instantiator.getArg(StackTracePrinter.class);
			ContextPairs contextPairs = instantiator.getArg(ContextPairs.class);
			StructuredLoggingJsonMembersCustomizer<?> jsonMembersCustomizer = instantiator
				.getArg(StructuredLoggingJsonMembersCustomizer.class);
			Assert.state(contextPairs != null, "'contextPairs' must not be null");
			return new LogstashStructuredLogFormatter(stackTracePrinter, contextPairs, jsonMembersCustomizer);
		}

	}

}

Domain

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free