package io.github.ajmath; import io.dropwizard.logging.AbstractAppenderFactory; import ch.qos.logback.classic.LoggerContext; import ch.qos.logback.classic.spi.ILoggingEvent; import ch.qos.logback.contrib.jackson.JacksonJsonFormatter; import ch.qos.logback.contrib.json.classic.JsonLayout; import ch.qos.logback.core.Appender; import ch.qos.logback.core.ConsoleAppender; import ch.qos.logback.core.Layout; import ch.qos.logback.core.encoder.LayoutWrappingEncoder; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonTypeName; @JsonTypeName("console-json") public class ConsoleJsonAppenderFactory extends AbstractAppenderFactory { private String appenderName = "console-json-appender"; private boolean includeContextName = true; @JsonProperty public String getName() { return this.appenderName; } @JsonProperty public void setName(String name) { this.appenderName = name; } @JsonProperty public boolean getIncludeContextName() { return this.includeContextName; } @JsonProperty public void setIncludeContextName(boolean includeContextName) { this.includeContextName = includeContextName; } @Override public Appender build(LoggerContext context, String applicationName, Layout providedLayout) { JsonLayout layout = new JsonLayout(); layout.setJsonFormatter(new JacksonJsonFormatter()); layout.setAppendLineSeparator(true); layout.setTimestampFormatTimezoneId("UTC"); layout.setIncludeContextName(includeContextName); LayoutWrappingEncoder layoutEncoder = new LayoutWrappingEncoder<>(); layoutEncoder.setLayout(layout); ConsoleAppender appender = new ConsoleAppender<>(); appender.setName(appenderName); appender.setContext(context); appender.setEncoder(layoutEncoder); addThresholdFilter(appender, threshold); appender.start(); return wrapAsync(appender); } }