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

ggregory pushed a commit to branch release-2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git

commit 9a290307c1fb136dee0cd2ab9ec90b6b5f312ebb
Author: Gary Gregory <[email protected]>
AuthorDate: Wed Feb 9 09:51:07 2022 -0500

    [LOG4J2-3391] Add optional additional fields to NoSQLAppender.
    
    Use a document instead of an array.
---
 .../core/appender/nosql/DefaultNoSqlObject.java    |  3 +++
 .../core/appender/nosql/NoSqlDatabaseManager.java  | 13 ++++------
 .../log4j/core/appender/nosql/NoSqlObject.java     |  1 +
 .../log4j/mongodb3/MongoDbDocumentObject.java      |  1 +
 .../mongodb3/MongoDb3AdditionalFieldsTest.java     | 28 +++++++++-------------
 .../log4j/mongodb4/MongoDb4DocumentObject.java     |  4 ++--
 .../mongodb4/MongoDb4AdditionalFieldsTest.java     | 26 +++++++++-----------
 7 files changed, 34 insertions(+), 42 deletions(-)

diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/DefaultNoSqlObject.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/DefaultNoSqlObject.java
index 7600e1a..debe9e5 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/DefaultNoSqlObject.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/DefaultNoSqlObject.java
@@ -31,6 +31,9 @@ public class DefaultNoSqlObject implements 
NoSqlObject<Map<String, Object>> {
 
     private final Map<String, Object> map;
 
+    /**
+     * Constructs a new instance.
+     */
     public DefaultNoSqlObject() {
         this.map = new HashMap<>();
     }
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManager.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManager.java
index 1dad261..df29f6a 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManager.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlDatabaseManager.java
@@ -27,6 +27,7 @@ import 
org.apache.logging.log4j.core.appender.AppenderLoggingException;
 import org.apache.logging.log4j.core.appender.ManagerFactory;
 import org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager;
 import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.lookup.StrSubstitutor;
 import org.apache.logging.log4j.core.util.Closer;
 import org.apache.logging.log4j.core.util.KeyValuePair;
 import org.apache.logging.log4j.message.MapMessage;
@@ -142,13 +143,6 @@ public final class NoSqlDatabaseManager<W> extends 
AbstractDatabaseManager {
         }
     }
 
-    private NoSqlObject<W> convertAdditionalField(KeyValuePair field) {
-        final NoSqlObject<W> object = connection.createObject();
-        object.set("key", field.getKey());
-        object.set("value", getStrSubstitutor().replace(field.getValue()));
-        return object;
-    }
-
     private NoSqlObject<W>[] convertStackTrace(final StackTraceElement[] 
stackTrace) {
         final NoSqlObject<W>[] stackTraceEntities = 
this.connection.createList(stackTrace.length);
         for (int i = 0; i < stackTrace.length; i++) {
@@ -168,7 +162,10 @@ public final class NoSqlDatabaseManager<W> extends 
AbstractDatabaseManager {
 
     private void setAdditionalFields(final NoSqlObject<W> entity) {
         if (additionalFields != null) {
-            entity.set("additionalFields", 
Stream.of(additionalFields).map(this::convertAdditionalField).toArray());
+            final NoSqlObject<W> object = connection.createObject();
+            final StrSubstitutor strSubstitutor = getStrSubstitutor();
+            Stream.of(additionalFields).forEach(f -> object.set(f.getKey(), 
strSubstitutor != null ? strSubstitutor.replace(f.getValue()) : f.getValue()));
+            entity.set("additionalFields", object);
         }
     }
 
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlObject.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlObject.java
index 41bc7f9..6b047d7 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlObject.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/nosql/NoSqlObject.java
@@ -22,6 +22,7 @@ package org.apache.logging.log4j.core.appender.nosql;
  * @param <W> Specifies what type of underlying object (such as a MongoDB 
BasicDBObject) this NoSqlObject wraps.
  */
 public interface NoSqlObject<W> {
+
     /**
      * Sets the value of a property on this object to a String or primitive.
      *
diff --git 
a/log4j-mongodb3/src/main/java/org/apache/logging/log4j/mongodb3/MongoDbDocumentObject.java
 
b/log4j-mongodb3/src/main/java/org/apache/logging/log4j/mongodb3/MongoDbDocumentObject.java
index c12e998..020c676 100644
--- 
a/log4j-mongodb3/src/main/java/org/apache/logging/log4j/mongodb3/MongoDbDocumentObject.java
+++ 
b/log4j-mongodb3/src/main/java/org/apache/logging/log4j/mongodb3/MongoDbDocumentObject.java
@@ -25,6 +25,7 @@ import org.bson.Document;
  * The MongoDB implementation of {@link NoSqlObject} typed to a BSON {@link 
Document}.
  */
 public final class MongoDbDocumentObject implements NoSqlObject<Document> {
+
     private final Document document;
 
     /**
diff --git 
a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3AdditionalFieldsTest.java
 
b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3AdditionalFieldsTest.java
index 9e8225d..a4c5399 100644
--- 
a/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3AdditionalFieldsTest.java
+++ 
b/log4j-mongodb3/src/test/java/org/apache/logging/log4j/mongodb3/MongoDb3AdditionalFieldsTest.java
@@ -16,8 +16,6 @@
  */
 package org.apache.logging.log4j.mongodb3;
 
-import java.util.List;
-
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.categories.Appenders;
@@ -69,18 +67,14 @@ public class MongoDb3AdditionalFieldsTest {
             Assert.assertEquals(first.toJson(), "Hello log 1", 
first.getString("message"));
             Assert.assertEquals(first.toJson(), "INFO", 
first.getString("level"));
             //
-            List<Document> list;
+            Document list;
             final String envPath = System.getenv("PATH");
             //
-            list = first.getList("additionalFields", Document.class);
-            Assert.assertEquals(first.toJson(), "A", list.get(0).get("key"));
-            Assert.assertEquals(first.toJson(), "1", list.get(0).get("value"));
-            Assert.assertEquals(first.toJson(), "B", list.get(1).get("key"));
-            Assert.assertEquals(first.toJson(), "2", list.get(1).get("value"));
-            Assert.assertEquals(first.toJson(), "env1", 
list.get(2).get("key"));
-            Assert.assertEquals(first.toJson(), envPath, 
list.get(2).get("value"));
-            Assert.assertEquals(first.toJson(), "env2", 
list.get(3).get("key"));
-            Assert.assertEquals(first.toJson(), envPath, 
list.get(3).get("value"));
+            list = first.get("additionalFields", Document.class);
+            Assert.assertEquals(first.toJson(), "1", list.getString("A"));
+            Assert.assertEquals(first.toJson(), "2", list.getString("B"));
+            Assert.assertEquals(first.toJson(), envPath, 
list.getString("env1"));
+            Assert.assertEquals(first.toJson(), envPath, 
list.getString("env2"));
             //
             found.skip(1);
             final Document second = found.first();
@@ -90,11 +84,11 @@ public class MongoDb3AdditionalFieldsTest {
             final Document thrown = second.get("thrown", Document.class);
             Assert.assertEquals(thrown.toJson(), "Hello ex 2", 
thrown.getString("message"));
             //
-            list = second.getList("additionalFields", Document.class);
-            Assert.assertEquals(first.toJson(), "A", list.get(0).get("key"));
-            Assert.assertEquals(first.toJson(), "1", list.get(0).get("value"));
-            Assert.assertEquals(first.toJson(), "B", list.get(1).get("key"));
-            Assert.assertEquals(first.toJson(), "2", list.get(1).get("value"));
+            list = second.get("additionalFields", Document.class);
+            Assert.assertEquals(first.toJson(), "1", list.getString("A"));
+            Assert.assertEquals(first.toJson(), "2", list.getString("B"));
+            Assert.assertEquals(first.toJson(), envPath, 
list.getString("env1"));
+            Assert.assertEquals(first.toJson(), envPath, 
list.getString("env2"));
         }
     }
 }
diff --git 
a/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4DocumentObject.java
 
b/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4DocumentObject.java
index 5978743..63c3fae 100644
--- 
a/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4DocumentObject.java
+++ 
b/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4DocumentObject.java
@@ -22,10 +22,10 @@ import 
org.apache.logging.log4j.core.appender.nosql.NoSqlObject;
 import org.bson.Document;
 
 /**
- * The MongoDB implementation of {@link NoSqlObject} typed to a BSON
- * {@link Document}.
+ * The MongoDB implementation of {@link NoSqlObject} typed to a BSON {@link 
Document}.
  */
 public final class MongoDb4DocumentObject implements NoSqlObject<Document> {
+
     private final Document document;
 
     /**
diff --git 
a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4AdditionalFieldsTest.java
 
b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4AdditionalFieldsTest.java
index 715162f..19e9c16 100644
--- 
a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4AdditionalFieldsTest.java
+++ 
b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4AdditionalFieldsTest.java
@@ -70,18 +70,14 @@ public class MongoDb4AdditionalFieldsTest {
             Assert.assertEquals(first.toJson(), "Hello log 1", 
first.getString("message"));
             Assert.assertEquals(first.toJson(), "INFO", 
first.getString("level"));
             //
-            List<Document> list;
+            Document list;
             final String envPath = System.getenv("PATH");
             //
-            list = first.getList("additionalFields", Document.class);
-            Assert.assertEquals(first.toJson(), "A", list.get(0).get("key"));
-            Assert.assertEquals(first.toJson(), "1", list.get(0).get("value"));
-            Assert.assertEquals(first.toJson(), "B", list.get(1).get("key"));
-            Assert.assertEquals(first.toJson(), "2", list.get(1).get("value"));
-            Assert.assertEquals(first.toJson(), "env1", 
list.get(2).get("key"));
-            Assert.assertEquals(first.toJson(), envPath, 
list.get(2).get("value"));
-            Assert.assertEquals(first.toJson(), "env2", 
list.get(3).get("key"));
-            Assert.assertEquals(first.toJson(), envPath, 
list.get(3).get("value"));
+            list = first.get("additionalFields", Document.class);
+            Assert.assertEquals(first.toJson(), "1", list.getString("A"));
+            Assert.assertEquals(first.toJson(), "2", list.getString("B"));
+            Assert.assertEquals(first.toJson(), envPath, 
list.getString("env1"));
+            Assert.assertEquals(first.toJson(), envPath, 
list.getString("env2"));
             //
             found.skip(1);
             final Document second = found.first();
@@ -91,11 +87,11 @@ public class MongoDb4AdditionalFieldsTest {
             final Document thrown = second.get("thrown", Document.class);
             Assert.assertEquals(thrown.toJson(), "Hello ex 2", 
thrown.getString("message"));
             //
-            list = second.getList("additionalFields", Document.class);
-            Assert.assertEquals(first.toJson(), "A", list.get(0).get("key"));
-            Assert.assertEquals(first.toJson(), "1", list.get(0).get("value"));
-            Assert.assertEquals(first.toJson(), "B", list.get(1).get("key"));
-            Assert.assertEquals(first.toJson(), "2", list.get(1).get("value"));
+            list = second.get("additionalFields", Document.class);
+            Assert.assertEquals(first.toJson(), "1", list.getString("A"));
+            Assert.assertEquals(first.toJson(), "2", list.getString("B"));
+            Assert.assertEquals(first.toJson(), envPath, 
list.getString("env1"));
+            Assert.assertEquals(first.toJson(), envPath, 
list.getString("env2"));
         }
     }
 }

Reply via email to