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")); } } }
