You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2020/12/29 21:38:46 UTC

[logging-log4j2] branch LOG4J2-2985 created (now dc3bf49)

This is an automated email from the ASF dual-hosted git repository.

vy pushed a change to branch LOG4J2-2985
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git.


      at dc3bf49  LOG4J2-2985 Add eventTemplateRootObjectKey parameter to JsonTemplateLayout.

This branch includes the following new commits:

     new dc3bf49  LOG4J2-2985 Add eventTemplateRootObjectKey parameter to JsonTemplateLayout.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[logging-log4j2] 01/01: LOG4J2-2985 Add eventTemplateRootObjectKey parameter to JsonTemplateLayout.

Posted by vy...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

vy pushed a commit to branch LOG4J2-2985
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit dc3bf494ac19d5d2cbfb178e5f0d96f7f0777a7c
Author: Volkan Yazici <vo...@gmail.com>
AuthorDate: Tue Dec 29 22:38:34 2020 +0100

    LOG4J2-2985 Add eventTemplateRootObjectKey parameter to JsonTemplateLayout.
---
 .../layout/template/json/JsonTemplateLayout.java   | 14 ++++++++++
 .../template/json/JsonTemplateLayoutDefaults.java  |  5 ++++
 .../json/resolver/EventResolverContext.java        | 14 ++++++++++
 .../template/json/resolver/TemplateResolvers.java  | 13 ++++++++--
 .../template/json/JsonTemplateLayoutTest.java      | 30 ++++++++++++++++++++++
 .../asciidoc/manual/json-template-layout.adoc.vm   |  7 +++++
 6 files changed, 81 insertions(+), 2 deletions(-)

diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayout.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayout.java
index ebc5a80..1f0506d 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayout.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayout.java
@@ -154,6 +154,7 @@ public class JsonTemplateLayout implements StringLayout {
                 .setLocationInfoEnabled(builder.locationInfoEnabled)
                 .setStackTraceEnabled(builder.stackTraceEnabled)
                 .setStackTraceElementObjectResolver(stackTraceElementObjectResolver)
+                .setEventTemplateRootObjectKey(builder.eventTemplateRootObjectKey)
                 .setEventTemplateAdditionalFields(eventTemplateAdditionalFields)
                 .build();
         return TemplateResolvers.ofTemplate(resolverContext, eventTemplate);
@@ -319,6 +320,10 @@ public class JsonTemplateLayout implements StringLayout {
         private String eventTemplateUri =
                 JsonTemplateLayoutDefaults.getEventTemplateUri();
 
+        @PluginBuilderAttribute
+        private String eventTemplateRootObjectKey =
+                JsonTemplateLayoutDefaults.getEventTemplateRootObjectKey();
+
         @PluginElement("EventTemplateAdditionalField")
         private EventTemplateAdditionalField[] eventTemplateAdditionalFields;
 
@@ -406,6 +411,15 @@ public class JsonTemplateLayout implements StringLayout {
             return this;
         }
 
+        public String getEventTemplateRootObjectKey() {
+            return eventTemplateRootObjectKey;
+        }
+
+        public Builder setEventTemplateRootObjectKey(String eventTemplateRootObjectKey) {
+            this.eventTemplateRootObjectKey = eventTemplateRootObjectKey;
+            return this;
+        }
+
         public EventTemplateAdditionalField[] getEventTemplateAdditionalFields() {
             return eventTemplateAdditionalFields;
         }
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java
index 5cf1e97..bcfdeea 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutDefaults.java
@@ -91,6 +91,11 @@ public final class JsonTemplateLayoutDefaults {
                 "classpath:EcsLayout.json");
     }
 
+    public static String getEventTemplateRootObjectKey() {
+        return PROPERTIES.getStringProperty(
+                "log4j.layout.jsonTemplate.eventTemplateRootObjectKey");
+    }
+
     public static String getStackTraceElementTemplate() {
         return PROPERTIES.getStringProperty(
                 "log4j.layout.jsonTemplate.stackTraceElementTemplate");
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/EventResolverContext.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/EventResolverContext.java
index b1dd8af..8f7107b 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/EventResolverContext.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/EventResolverContext.java
@@ -47,6 +47,8 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv
 
     private final TemplateResolver<Throwable> stackTraceObjectResolver;
 
+    private final String eventTemplateRootObjectKey;
+
     private final EventTemplateAdditionalField[] additionalFields;
 
     private EventResolverContext(final Builder builder) {
@@ -61,6 +63,7 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv
         this.stackTraceObjectResolver = stackTraceEnabled
                 ? new StackTraceObjectResolver(builder.stackTraceElementObjectResolver)
                 : null;
+        this.eventTemplateRootObjectKey = builder.eventTemplateRootObjectKey;
         this.additionalFields = builder.eventTemplateAdditionalFields;
     }
 
@@ -112,6 +115,10 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv
         return stackTraceObjectResolver;
     }
 
+    String getEventTemplateRootObjectKey() {
+        return eventTemplateRootObjectKey;
+    }
+
     EventTemplateAdditionalField[] getAdditionalFields() {
         return additionalFields;
     }
@@ -140,6 +147,8 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv
 
         private TemplateResolver<StackTraceElement> stackTraceElementObjectResolver;
 
+        private String eventTemplateRootObjectKey;
+
         private EventTemplateAdditionalField[] eventTemplateAdditionalFields;
 
         private Builder() {
@@ -192,6 +201,11 @@ public final class EventResolverContext implements TemplateResolverContext<LogEv
             return this;
         }
 
+        public Builder setEventTemplateRootObjectKey(String eventTemplateRootObjectKey) {
+            this.eventTemplateRootObjectKey = eventTemplateRootObjectKey;
+            return this;
+        }
+
         public Builder setEventTemplateAdditionalFields(
                 final EventTemplateAdditionalField[] eventTemplateAdditionalFields) {
             this.eventTemplateAdditionalFields = eventTemplateAdditionalFields;
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/TemplateResolvers.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/TemplateResolvers.java
index ab4dfa4..737ed87 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/TemplateResolvers.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/resolver/TemplateResolvers.java
@@ -22,6 +22,7 @@ import org.apache.logging.log4j.layout.template.json.util.JsonReader;
 import org.apache.logging.log4j.layout.template.json.util.JsonWriter;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -78,7 +79,7 @@ public final class TemplateResolvers {
             final String template) {
 
         // Read the template.
-        final Object node;
+        Object node;
         try {
             node = JsonReader.read(template);
         } catch (final Exception error) {
@@ -86,11 +87,19 @@ public final class TemplateResolvers {
             throw new RuntimeException(message, error);
         }
 
-        // Append the additional fields.
         if (context instanceof EventResolverContext) {
+
+            // Append the additional fields.
             final EventResolverContext eventResolverContext = (EventResolverContext) context;
             final EventTemplateAdditionalField[] additionalFields = eventResolverContext.getAdditionalFields();
             appendAdditionalFields(node, additionalFields);
+
+            // Set the root object key, if given.
+            final String rootObjectKey = eventResolverContext.getEventTemplateRootObjectKey();
+            if (rootObjectKey != null) {
+                node = Collections.singletonMap(rootObjectKey, node);
+            }
+
         }
 
         // Resolve the template.
diff --git a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
index 49ef8ca..b184ca8 100644
--- a/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
+++ b/log4j-layout-template-json/src/test/java/org/apache/logging/log4j/layout/template/json/JsonTemplateLayoutTest.java
@@ -2115,6 +2115,36 @@ class JsonTemplateLayoutTest {
 
     }
 
+    @Test
+    void test_eventTemplateRootObjectKey() {
+
+        // Create the event template.
+        final String eventTemplate = writeJson(asMap(
+                "message", asMap("$resolver", "message")));
+
+        // Create the layout.
+        final JsonTemplateLayout layout = JsonTemplateLayout
+                .newBuilder()
+                .setConfiguration(CONFIGURATION)
+                .setEventTemplate(eventTemplate)
+                .setEventTemplateRootObjectKey("event")
+                .build();
+
+        // Create the log event.
+        final Message message = new SimpleMessage("LOG4J2-2985");
+        final LogEvent logEvent = Log4jLogEvent
+                .newBuilder()
+                .setLoggerName(LOGGER_NAME)
+                .setMessage(message)
+                .build();
+
+        // Check the serialized event.
+        usingSerializedLogEventAccessor(layout, logEvent, accessor ->
+                assertThat(accessor.getObject(new String[]{"event", "message"}))
+                        .isEqualTo("LOG4J2-2985"));
+
+    }
+
     private static synchronized String writeJson(final Object value) {
         final StringBuilder stringBuilder = JSON_WRITER.getStringBuilder();
         stringBuilder.setLength(0);
diff --git a/src/site/asciidoc/manual/json-template-layout.adoc.vm b/src/site/asciidoc/manual/json-template-layout.adoc.vm
index 488d2c6..6003ffe 100644
--- a/src/site/asciidoc/manual/json-template-layout.adoc.vm
+++ b/src/site/asciidoc/manual/json-template-layout.adoc.vm
@@ -186,6 +186,13 @@ appender.console.json.eventTemplateUri = classpath:LogstashJsonEventLayoutV1.jso
   `classpath:EcsLayout.json` set by `log4j.layout.jsonTemplate.eventTemplateUri`
   property)
 
+| eventTemplateRootObjectKey
+| String
+| if given, puts the event template into a JSON object composed of a single
+  member with the given key (defaults to `null` set by
+  `log4j.layout.jsonTemplate.eventTemplateRootObjectKey`
+  property)
+
 | eventTemplateAdditionalFields
 | EventTemplateAdditionalField[]
 | additional key-value pairs appended to the root of the event template