summaryrefslogtreecommitdiff
path: root/runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java')
-rw-r--r--runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java141
1 files changed, 0 insertions, 141 deletions
diff --git a/runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java b/runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java
deleted file mode 100644
index 066f709..0000000
--- a/runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package eu.mulk.quarkus.googlecloud.jsonlogging;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Level;
-import org.jboss.logmanager.ExtFormatter;
-import org.jboss.logmanager.ExtLogRecord;
-
-/**
- * Formats log records as JSON for consumption by Google Cloud Logging.
- *
- * <p>Meant to be used in containers running on Google Kubernetes Engine (GKE).
- *
- * @see LogEntry
- */
-public class Formatter extends ExtFormatter {
-
- private static final String TRACE_LEVEL = "TRACE";
- private static final String DEBUG_LEVEL = "DEBUG";
- private static final String INFO_LEVEL = "INFO";
- private static final String WARNING_LEVEL = "WARNING";
- private static final String ERROR_LEVEL = "ERROR";
-
- private static final String ERROR_EVENT_TYPE =
- "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent";
-
- private final List<StructuredParameterProvider> parameterProviders;
- private final List<LabelProvider> labelProviders;
-
- /**
- * Constructs a {@link Formatter}.
- *
- * @param parameterProviders the {@link StructuredParameterProvider}s to apply to each log entry.
- * @param labelProviders the {@link LabelProvider}s to apply to each log entry.
- */
- public Formatter(
- Collection<StructuredParameterProvider> parameterProviders,
- Collection<LabelProvider> labelProviders) {
- this.parameterProviders = List.copyOf(parameterProviders);
- this.labelProviders = List.copyOf(labelProviders);
- }
-
- @Override
- public String format(ExtLogRecord logRecord) {
- var message = formatMessageWithStackTrace(logRecord);
-
- List<StructuredParameter> parameters = new ArrayList<>();
- Map<String, String> labels = new HashMap<>();
-
- for (var parameterProvider : parameterProviders) {
- var parameter = parameterProvider.getParameter();
- if (parameter != null) {
- parameters.add(parameter);
- }
- }
-
- for (var labelProvider : labelProviders) {
- var providedLabels = labelProvider.getLabels();
- if (providedLabels != null) {
- for (var label : providedLabels) {
- labels.put(label.key(), label.value());
- }
- }
- }
-
- if (logRecord.getParameters() != null) {
- for (var parameter : logRecord.getParameters()) {
- if (parameter instanceof StructuredParameter) {
- parameters.add((StructuredParameter) parameter);
- } else if (parameter instanceof Label) {
- var label = (Label) parameter;
- labels.put(label.key(), label.value());
- }
- }
- }
-
- var mdc = logRecord.getMdcCopy();
- var ndc = logRecord.getNdc();
-
- var sourceLocation =
- new LogEntry.SourceLocation(
- logRecord.getSourceFileName(),
- String.valueOf(logRecord.getSourceLineNumber()),
- String.format(
- "%s.%s", logRecord.getSourceClassName(), logRecord.getSourceMethodName()));
-
- var entry =
- new LogEntry(
- message,
- severityOf(logRecord.getLevel()),
- new LogEntry.Timestamp(logRecord.getInstant()),
- null,
- null,
- sourceLocation,
- labels,
- parameters,
- mdc,
- ndc,
- logRecord.getLevel().intValue() >= 1000 ? ERROR_EVENT_TYPE : null);
-
- return entry.json().build().toString() + "\n";
- }
-
- /**
- * Formats the log message corresponding to {@code logRecord} including a stack trace of the
- * {@link ExtLogRecord#getThrown()} exception if any.
- */
- private String formatMessageWithStackTrace(ExtLogRecord logRecord) {
- var messageStringWriter = new StringWriter();
- var messagePrintWriter = new PrintWriter(messageStringWriter);
- messagePrintWriter.append(this.formatMessage(logRecord));
-
- if (logRecord.getThrown() != null) {
- messagePrintWriter.println();
- logRecord.getThrown().printStackTrace(messagePrintWriter);
- }
-
- messagePrintWriter.close();
- return messageStringWriter.toString();
- }
-
- /** Computes the Google Cloud Logging severity corresponding to a given {@link Level}. */
- private static String severityOf(Level level) {
- if (level.intValue() < 500) {
- return TRACE_LEVEL;
- } else if (level.intValue() < 700) {
- return DEBUG_LEVEL;
- } else if (level.intValue() < 900) {
- return INFO_LEVEL;
- } else if (level.intValue() < 1000) {
- return WARNING_LEVEL;
- } else {
- return ERROR_LEVEL;
- }
- }
-}