summaryrefslogtreecommitdiff
path: root/core/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java')
-rw-r--r--core/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java29
1 files changed, 29 insertions, 0 deletions
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 066f709..61a2dea 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
@@ -7,6 +7,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.ServiceLoader;
import java.util.logging.Level;
import org.jboss.logmanager.ExtFormatter;
import org.jboss.logmanager.ExtLogRecord;
@@ -35,6 +36,9 @@ public class Formatter extends ExtFormatter {
/**
* Constructs a {@link Formatter}.
*
+ * <p><strong>Note:</strong> This constructor does not automatically discover providers using the
+ * {@link ServiceLoader} mechanism. See {@link #load} for this case use.
+ *
* @param parameterProviders the {@link StructuredParameterProvider}s to apply to each log entry.
* @param labelProviders the {@link LabelProvider}s to apply to each log entry.
*/
@@ -45,6 +49,31 @@ public class Formatter extends ExtFormatter {
this.labelProviders = List.copyOf(labelProviders);
}
+ /**
+ * Constructs a {@link Formatter} with parameter and label providers supplied by {@link
+ * ServiceLoader}.
+ *
+ * <p>In addition to the providers supplied as parameters, this factory method loads all {@link
+ * StructuredParameterProvider}s and {@link LabelProvider}s found through the {@link
+ * ServiceLoader} mechanism.
+ *
+ * @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 static Formatter load(
+ Collection<StructuredParameterProvider> parameterProviders,
+ Collection<LabelProvider> labelProviders) {
+ parameterProviders = new ArrayList<>(parameterProviders);
+ ServiceLoader.load(StructuredParameterProvider.class, Formatter.class.getClassLoader())
+ .forEach(parameterProviders::add);
+
+ labelProviders = new ArrayList<>(labelProviders);
+ ServiceLoader.load(LabelProvider.class, Formatter.class.getClassLoader())
+ .forEach(labelProviders::add);
+
+ return new Formatter(parameterProviders, labelProviders);
+ }
+
@Override
public String format(ExtLogRecord logRecord) {
var message = formatMessageWithStackTrace(logRecord);