Add ProviderContext.
Adds a ProviderContext type which is passed to LabelProvider#getLabels
and StructuredParameterProvider#getParameter and which carries some
information from ExtLogRecord that is not taken care of by Formatter.
ProviderContext is designed to be extended in the future.
Change-Id: Ib29b7032ae42e0f9e86c75b7404c25cd75b20011
diff --git a/core/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java b/core/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java
index f6167f6..c4e36de 100644
--- a/core/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java
+++ b/core/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java
@@ -99,15 +99,17 @@
List<StructuredParameter> parameters = new ArrayList<>();
Map<String, String> labels = new HashMap<>();
+ var providerContext = new ProviderContext(logRecord);
+
for (var parameterProvider : parameterProviders) {
- var parameter = parameterProvider.getParameter();
+ var parameter = parameterProvider.getParameter(providerContext);
if (parameter != null) {
parameters.add(parameter);
}
}
for (var labelProvider : labelProviders) {
- var providedLabels = labelProvider.getLabels();
+ var providedLabels = labelProvider.getLabels(providerContext);
if (providedLabels != null) {
for (var label : providedLabels) {
labels.put(label.key(), label.value());
@@ -185,4 +187,37 @@
return ERROR_LEVEL;
}
}
+
+ /**
+ * An implementation of {@link LabelProvider.Context} and {@link
+ * StructuredParameterProvider.Context}.
+ */
+ private static class ProviderContext
+ implements LabelProvider.Context, StructuredParameterProvider.Context {
+
+ private final String loggerName;
+ private final long sequenceNumber;
+ private final String threadName;
+
+ private ProviderContext(ExtLogRecord logRecord) {
+ loggerName = logRecord.getLoggerName();
+ sequenceNumber = logRecord.getSequenceNumber();
+ threadName = logRecord.getThreadName();
+ }
+
+ @Override
+ public String loggerName() {
+ return loggerName;
+ }
+
+ @Override
+ public long sequenceNumber() {
+ return sequenceNumber;
+ }
+
+ @Override
+ public String threadName() {
+ return threadName;
+ }
+ }
}