Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,18 @@
import ch.qos.logback.core.CoreConstants;
import ch.qos.logback.core.UnsynchronizedAppenderBase;
import com.google.gson.Gson;
import java.time.Instant;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

/**
* A simple logging Appender that output logs in Json format. Inspired by
* com.google.cloud.logging.logback.LoggingAppender.
*/
public class JsonAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
private static final Gson gson = new Gson();
private static final DateTimeFormatter TIMESTAMP_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z'").withZone(ZoneOffset.UTC);

@Override
protected void append(ILoggingEvent event) {
Expand All @@ -38,16 +43,23 @@ protected void append(ILoggingEvent event) {
.append(CoreConstants.LINE_SEPARATOR)
.append(ThrowableProxyUtil.asString(event.getThrowableProxy()));
}
System.err.println(gson.toJson(new JsonEntry(message, event.getLevel().toString())));
System.err.println(
gson.toJson(
new JsonEntry(
message,
event.getLevel().toString(),
TIMESTAMP_FORMATTER.format(Instant.ofEpochMilli(event.getTimeStamp())))));
}

private static final class JsonEntry {
final CharSequence message;
final CharSequence severity;
final CharSequence timestamp;

public JsonEntry(CharSequence message, CharSequence severity) {
public JsonEntry(CharSequence message, CharSequence severity, CharSequence timestamp) {
this.message = message;
this.severity = severity;
this.timestamp = timestamp;
}
}
}
Loading