Add LabelProvider, rename {=> Structured}ParameterProvider.

Change-Id: Ib4902a35e22d023fc7e8dda4ca73ec2aab50695d
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
index c6e177c..c8bb310 100644
--- a/runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java
+++ b/runtime/src/main/java/eu/mulk/quarkus/googlecloud/jsonlogging/Formatter.java
@@ -29,10 +29,14 @@
   private static final String ERROR_EVENT_TYPE =
       "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent";
 
-  private final List<ParameterProvider> parameterProviders;
+  private final List<StructuredParameterProvider> parameterProviders;
+  private final List<LabelProvider> labelProviders;
 
-  public Formatter(Collection<ParameterProvider> parameterProviders) {
+  public Formatter(
+      Collection<StructuredParameterProvider> parameterProviders,
+      Collection<LabelProvider> labelProviders) {
     this.parameterProviders = List.copyOf(parameterProviders);
+    this.labelProviders = List.copyOf(labelProviders);
   }
 
   @Override
@@ -43,12 +47,21 @@
     Map<String, String> labels = new HashMap<>();
 
     for (var parameterProvider : parameterProviders) {
-      var parameter = parameterProvider.get();
+      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) {