From 91a0db4d92037cc4aea0bc5ea35065f62e9b61f9 Mon Sep 17 00:00:00 2001
From: Josh Smith <jesmith17@gmail.com>
Date: Sat, 21 Dec 2024 17:40:55 -0600
Subject: [PATCH 01/10] Added ability to configure database and collection name
 via the config file instead of just the connectionString

---
 .../log4j/mongodb/MongoDbProvider.java        | 37 +++++++++++++++---
 .../mongodb/MongoDbCollectionNameIT.java      | 36 +++++++++++++++++
 .../MongoDbDatabaseAndCollectionNameIT.java   | 36 +++++++++++++++++
 .../resources/MongoDbCollectionNameIT.xml     | 37 ++++++++++++++++++
 .../MongoDbDatabaseAndCollectionNameIT.xml    | 39 +++++++++++++++++++
 5 files changed, 180 insertions(+), 5 deletions(-)
 create mode 100644 log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCollectionNameIT.java
 create mode 100644 log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbDatabaseAndCollectionNameIT.java
 create mode 100644 log4j-mongodb/src/test/resources/MongoDbCollectionNameIT.xml
 create mode 100644 log4j-mongodb/src/test/resources/MongoDbDatabaseAndCollectionNameIT.xml

diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
index 8bc0098809c..ad8f91f1137 100644
--- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
+++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
@@ -54,9 +54,15 @@ public static class Builder<B extends Builder<B>> extends AbstractFilterable.Bui
         @PluginAttribute("capped")
         private boolean capped = false;
 
+        @PluginAttribute("collectionName")
+        private String collectionName = null;
+
+        @PluginAttribute("datbaseName")
+        private String databaseName = null;
+
         @Override
         public MongoDbProvider build() {
-            return new MongoDbProvider(connectionStringSource, capped, collectionSize);
+            return new MongoDbProvider(connectionStringSource, capped, collectionSize, databaseName, collectionName);
         }
 
         public B setConnectionStringSource(final String connectionStringSource) {
@@ -73,6 +79,16 @@ public B setCollectionSize(final long collectionSize) {
             this.collectionSize = collectionSize;
             return asBuilder();
         }
+
+        public B setCollectionName(final String collectionName) {
+            this.collectionName = collectionName;
+            return asBuilder();
+        }
+
+        public B setDatabaseName(final String databaseName) {
+            this.databaseName = databaseName;
+            return asBuilder();
+        }
     }
 
     private static final Logger LOGGER = StatusLogger.getLogger();
@@ -94,11 +110,13 @@ public static <B extends Builder<B>> B newBuilder() {
 
     private final Long collectionSize;
     private final boolean isCapped;
+    private final String collectionName;
+    private final String databaseName;
     private final MongoClient mongoClient;
     private final MongoDatabase mongoDatabase;
     private final ConnectionString connectionString;
 
-    private MongoDbProvider(final String connectionStringSource, final boolean isCapped, final Long collectionSize) {
+    private MongoDbProvider(final String connectionStringSource, final boolean isCapped, final Long collectionSize, final String databaseName, final String collectionName) {
         LOGGER.debug("Creating ConnectionString {}...", connectionStringSource);
         this.connectionString = new ConnectionString(connectionStringSource);
         LOGGER.debug("Created ConnectionString {}", connectionString);
@@ -113,10 +131,19 @@ private MongoDbProvider(final String connectionStringSource, final boolean isCap
         LOGGER.debug("Creating MongoClient {}...", settings);
         this.mongoClient = MongoClients.create(settings);
         LOGGER.debug("Created MongoClient {}", mongoClient);
-        final String databaseName = this.connectionString.getDatabase();
-        LOGGER.debug("Getting MongoDatabase {}...", databaseName);
-        this.mongoDatabase = this.mongoClient.getDatabase(databaseName);
+        if (databaseName == null || databaseName.isEmpty()) {
+            this.databaseName = this.connectionString.getDatabase();
+        } else {
+            this.databaseName = databaseName;
+        }
+        LOGGER.debug("Getting MongoDatabase {}...", this.databaseName);
+        this.mongoDatabase = this.mongoClient.getDatabase(this.databaseName);
         LOGGER.debug("Got MongoDatabase {}", mongoDatabase);
+        if (collectionName == null || collectionName.isEmpty()) {
+            this.collectionName = this.connectionString.getCollection();
+        } else {
+            this.collectionName = collectionName;
+        }
         this.isCapped = isCapped;
         this.collectionSize = collectionSize;
     }
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCollectionNameIT.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCollectionNameIT.java
new file mode 100644
index 00000000000..60c74dff597
--- /dev/null
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCollectionNameIT.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.logging.log4j.mongodb;
+
+import com.mongodb.client.MongoClient;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
+import org.junit.jupiter.api.Test;
+
+@UsingMongoDb
+@LoggerContextSource("MongoDbCollectionNameIT.xml")
+// Print debug status logger output upon failure
+@UsingStatusListener
+class MongoDbCollectionNameIT extends AbstractMongoDbCappedIT {
+
+    @Test
+    @Override
+    protected void test(LoggerContext ctx, MongoClient mongoClient) {
+        super.test(ctx, mongoClient);
+    }
+}
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbDatabaseAndCollectionNameIT.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbDatabaseAndCollectionNameIT.java
new file mode 100644
index 00000000000..8d399d10ac9
--- /dev/null
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbDatabaseAndCollectionNameIT.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.logging.log4j.mongodb;
+
+import com.mongodb.client.MongoClient;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.test.junit.UsingStatusListener;
+import org.junit.jupiter.api.Test;
+
+@UsingMongoDb
+@LoggerContextSource("MongoDbDatabaseAndCollectionNameIT.xml")
+// Print debug status logger output upon failure
+@UsingStatusListener
+class MongoDbDatabaseAndCollectionNameIT extends AbstractMongoDbCappedIT {
+
+    @Test
+    @Override
+    protected void test(LoggerContext ctx, MongoClient mongoClient) {
+        super.test(ctx, mongoClient);
+    }
+}
diff --git a/log4j-mongodb/src/test/resources/MongoDbCollectionNameIT.xml b/log4j-mongodb/src/test/resources/MongoDbCollectionNameIT.xml
new file mode 100644
index 00000000000..2f2dcc3d7c9
--- /dev/null
+++ b/log4j-mongodb/src/test/resources/MongoDbCollectionNameIT.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<Configuration xmlns="https://logging.apache.org/xml/ns"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="
+                   https://logging.apache.org/xml/ns
+                   https://logging.apache.org/xml/ns/log4j-config-3.xsd">
+  <Appenders>
+    <NoSql name="MONGO">
+      <MongoDb
+        connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb"
+        capped="true"
+        collectionSize="1073741824"
+        collectionName="MongoDBCollectionNameIT"/>
+    </NoSql>
+  </Appenders>
+  <Loggers>
+    <Root level="ALL">
+      <AppenderRef ref="MONGO" />
+    </Root>
+  </Loggers>
+</Configuration>
diff --git a/log4j-mongodb/src/test/resources/MongoDbDatabaseAndCollectionNameIT.xml b/log4j-mongodb/src/test/resources/MongoDbDatabaseAndCollectionNameIT.xml
new file mode 100644
index 00000000000..adf32a000d9
--- /dev/null
+++ b/log4j-mongodb/src/test/resources/MongoDbDatabaseAndCollectionNameIT.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to you under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~      http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+<Configuration xmlns="https://logging.apache.org/xml/ns"
+               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+               xsi:schemaLocation="
+                   https://logging.apache.org/xml/ns
+                   https://logging.apache.org/xml/ns/log4j-config-3.xsd">
+  <Appenders>
+    <NoSql name="MONGO">
+      <MongoDb
+        connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}"
+        capped="true"
+        collectionSize="1073741824"
+        databaseName="testDb"
+        collectionName="MongoDbDatabaseAndCollectionNameIT"
+      />
+    </NoSql>
+  </Appenders>
+  <Loggers>
+    <Root level="ALL">
+      <AppenderRef ref="MONGO" />
+    </Root>
+  </Loggers>
+</Configuration>

From 18368090d3f197d7ab8fca356e243ea44970ff39 Mon Sep 17 00:00:00 2001
From: Josh Smith <jesmith17@gmail.com>
Date: Sat, 21 Dec 2024 17:50:50 -0600
Subject: [PATCH 02/10] Added changelog file

---
 src/changelog/.3.x.x/update_org_log4j_mongodb.xml | 8 ++++++++
 1 file changed, 8 insertions(+)
 create mode 100644 src/changelog/.3.x.x/update_org_log4j_mongodb.xml

diff --git a/src/changelog/.3.x.x/update_org_log4j_mongodb.xml b/src/changelog/.3.x.x/update_org_log4j_mongodb.xml
new file mode 100644
index 00000000000..cf632d89059
--- /dev/null
+++ b/src/changelog/.3.x.x/update_org_log4j_mongodb.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns="https://logging.apache.org/xml/ns"
+       xsi:schemaLocation="https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-changelog-0.xsd"
+       type="updated">
+  <issue id="3321" link="https://github.com/apache/logging-log4j2/pull/3321"/>
+  <description format="asciidoc">Update log4j-mongodb to allow collectionName and databaseName to be defined via the config file</description>
+</entry>

From 9d9608d3d0d2ec4c064e608332e4231eeefd4de3 Mon Sep 17 00:00:00 2001
From: "Piotr P. Karwasz" <piotr.github@karwasz.org>
Date: Wed, 25 Dec 2024 10:14:37 +0100
Subject: [PATCH 03/10] Formatting

---
 .../org/apache/logging/log4j/mongodb/MongoDbProvider.java  | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
index ad8f91f1137..4db68505086 100644
--- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
+++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
@@ -116,7 +116,12 @@ public static <B extends Builder<B>> B newBuilder() {
     private final MongoDatabase mongoDatabase;
     private final ConnectionString connectionString;
 
-    private MongoDbProvider(final String connectionStringSource, final boolean isCapped, final Long collectionSize, final String databaseName, final String collectionName) {
+    private MongoDbProvider(
+            final String connectionStringSource,
+            final boolean isCapped,
+            final Long collectionSize,
+            final String databaseName,
+            final String collectionName) {
         LOGGER.debug("Creating ConnectionString {}...", connectionStringSource);
         this.connectionString = new ConnectionString(connectionStringSource);
         LOGGER.debug("Created ConnectionString {}", connectionString);

From aa4c0bcf033087d34d168f94ef3a24ae695e9d27 Mon Sep 17 00:00:00 2001
From: Josh Smith <jesmith17@gmail.com>
Date: Sat, 28 Dec 2024 19:45:21 -0600
Subject: [PATCH 04/10] Solved merge conflict in MongoDbProvider class

---
 log4j-mongodb/pom.xml                         |  11 ++
 .../log4j/mongodb/MongoDbConnection.java      |  19 ++--
 .../log4j/mongodb/MongoDbProvider.java        |  69 +++++++-----
 .../log4j/mongodb/MongoDbProviderTest.java    | 100 ++++++++++++++++++
 .../appenders/database/nosql-mongo-keys.json  |   4 +-
 .../database/nosql-mongo-keys.properties      |   5 +-
 .../appenders/database/nosql-mongo-keys.xml   |   2 +-
 .../appenders/database/nosql-mongo-keys.yaml  |   4 +-
 .../appenders/database/nosql-mongo.json       |   4 +-
 .../appenders/database/nosql-mongo.properties |   4 +-
 .../manual/appenders/database/nosql-mongo.xml |   2 +-
 .../appenders/database/nosql-mongo.yaml       |   4 +-
 .../ROOT/pages/manual/appenders/database.adoc |  22 ++++
 13 files changed, 209 insertions(+), 41 deletions(-)
 create mode 100644 log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java

diff --git a/log4j-mongodb/pom.xml b/log4j-mongodb/pom.xml
index b03b534e66e..a4c329fb853 100644
--- a/log4j-mongodb/pom.xml
+++ b/log4j-mongodb/pom.xml
@@ -141,6 +141,17 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
+      <dependency>
+          <groupId>junit</groupId>
+          <artifactId>junit</artifactId>
+          <scope>test</scope>
+      </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-junit-jupiter</artifactId>
+      <version>5.14.2</version>
+      <scope>test</scope>
+    </dependency>
 
   </dependencies>
 
diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java
index cabc6c73e1e..e3db2751638 100644
--- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java
+++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java
@@ -59,20 +59,19 @@ private static MongoCollection<Document> getOrCreateMongoCollection(
         }
     }
 
-    private final ConnectionString connectionString;
+
     private final MongoCollection<Document> collection;
     private final MongoClient mongoClient;
 
     public MongoDbConnection(
-            final ConnectionString connectionString,
             final MongoClient mongoClient,
             final MongoDatabase mongoDatabase,
+            final String collectionName,
             final boolean isCapped,
             final Long sizeInBytes) {
-        this.connectionString = connectionString;
         this.mongoClient = mongoClient;
         this.collection =
-                getOrCreateMongoCollection(mongoDatabase, connectionString.getCollection(), isCapped, sizeInBytes);
+                getOrCreateMongoCollection(mongoDatabase, collectionName, isCapped, sizeInBytes);
     }
 
     @Override
@@ -107,7 +106,15 @@ public void insertObject(final NoSqlObject<Document> object) {
     @Override
     public String toString() {
         return String.format(
-                "Mongo4Connection [connectionString=%s, collection=%s, mongoClient=%s]",
-                connectionString, collection, mongoClient);
+                "Mongo4Connection [collection=%s, mongoClient=%s]", collection, mongoClient);
+    }
+
+    public MongoCollection<Document> getCollection(){
+        return this.collection;
     }
+
+    public MongoClient getMongoClient(){
+        return this.mongoClient;
+    }
+
 }
diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
index 4db68505086..44b79ef5d71 100644
--- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
+++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
@@ -18,6 +18,7 @@
 
 import com.mongodb.ConnectionString;
 import com.mongodb.MongoClientSettings;
+import com.mongodb.MongoNamespace;
 import com.mongodb.client.MongoClient;
 import com.mongodb.client.MongoClients;
 import com.mongodb.client.MongoDatabase;
@@ -57,12 +58,40 @@ public static class Builder<B extends Builder<B>> extends AbstractFilterable.Bui
         @PluginAttribute("collectionName")
         private String collectionName = null;
 
-        @PluginAttribute("datbaseName")
+        @PluginAttribute("databaseName")
         private String databaseName = null;
 
         @Override
         public MongoDbProvider build() {
-            return new MongoDbProvider(connectionStringSource, capped, collectionSize, databaseName, collectionName);
+            LOGGER.debug("Creating ConnectionString {}...", connectionStringSource);
+            ConnectionString connectionString;
+            try {
+                connectionString = new ConnectionString(connectionStringSource);
+            } catch (final IllegalArgumentException e) {
+                LOGGER.error("Invalid MongoDB connection string `{}`.", connectionStringSource, e);
+                return null;
+            }
+
+            String effectiveDatabaseName = databaseName != null ? databaseName : connectionString.getDatabase();
+            String effectiveCollectionName = collectionName != null ? collectionName: connectionString.getCollection();
+            // Validate the provided databaseName property
+            try {
+                MongoNamespace.checkDatabaseNameValidity(effectiveDatabaseName);
+                databaseName = effectiveDatabaseName;
+            } catch (final IllegalArgumentException e) {
+                LOGGER.error("Invalid MongoDB database name `{}`.", effectiveDatabaseName, e);
+                return null;
+            }
+            // Validate the provided collectionName property
+            try {
+                MongoNamespace.checkCollectionNameValidity(effectiveCollectionName);
+                collectionName = effectiveCollectionName;
+            } catch (final IllegalArgumentException e) {
+                LOGGER.error("Invalid MongoDB collection name `{}`.", effectiveCollectionName, e);
+                return null;
+            }
+
+            return new MongoDbProvider(connectionString, capped, collectionSize, databaseName, collectionName);
         }
 
         public B setConnectionStringSource(final String connectionStringSource) {
@@ -111,24 +140,18 @@ public static <B extends Builder<B>> B newBuilder() {
     private final Long collectionSize;
     private final boolean isCapped;
     private final String collectionName;
-    private final String databaseName;
     private final MongoClient mongoClient;
     private final MongoDatabase mongoDatabase;
     private final ConnectionString connectionString;
 
-    private MongoDbProvider(
-            final String connectionStringSource,
-            final boolean isCapped,
-            final Long collectionSize,
-            final String databaseName,
-            final String collectionName) {
-        LOGGER.debug("Creating ConnectionString {}...", connectionStringSource);
-        this.connectionString = new ConnectionString(connectionStringSource);
+    private MongoDbProvider(final ConnectionString connectionString, final boolean isCapped, final Long collectionSize, final String databaseName, final String collectionName) {
+
         LOGGER.debug("Created ConnectionString {}", connectionString);
+        this.connectionString = connectionString;
         LOGGER.debug("Creating MongoClientSettings...");
         // @formatter:off
         final MongoClientSettings settings = MongoClientSettings.builder()
-                .applyConnectionString(this.connectionString)
+                .applyConnectionString(connectionString)
                 .codecRegistry(CODEC_REGISTRIES)
                 .build();
         // @formatter:on
@@ -136,37 +159,29 @@ private MongoDbProvider(
         LOGGER.debug("Creating MongoClient {}...", settings);
         this.mongoClient = MongoClients.create(settings);
         LOGGER.debug("Created MongoClient {}", mongoClient);
-        if (databaseName == null || databaseName.isEmpty()) {
-            this.databaseName = this.connectionString.getDatabase();
-        } else {
-            this.databaseName = databaseName;
-        }
-        LOGGER.debug("Getting MongoDatabase {}...", this.databaseName);
-        this.mongoDatabase = this.mongoClient.getDatabase(this.databaseName);
+        LOGGER.debug("Getting MongoDatabase {}...", databaseName);
+        this.mongoDatabase = this.mongoClient.getDatabase(databaseName);
         LOGGER.debug("Got MongoDatabase {}", mongoDatabase);
-        if (collectionName == null || collectionName.isEmpty()) {
-            this.collectionName = this.connectionString.getCollection();
-        } else {
-            this.collectionName = collectionName;
-        }
+        this.collectionName = collectionName;
         this.isCapped = isCapped;
         this.collectionSize = collectionSize;
     }
 
     @Override
     public MongoDbConnection getConnection() {
-        return new MongoDbConnection(connectionString, mongoClient, mongoDatabase, isCapped, collectionSize);
+        return new MongoDbConnection(mongoClient, mongoDatabase, collectionName, isCapped, collectionSize);
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s [connectionString=%s, collectionSize=%s, isCapped=%s, mongoClient=%s, mongoDatabase=%s]",
+                "%s [connectionString=%s, collectionSize=%s, isCapped=%s, mongoClient=%s, mongoDatabase=%s, collectionName=%s]",
                 MongoDbProvider.class.getSimpleName(),
                 connectionString,
                 collectionSize,
                 isCapped,
                 mongoClient,
-                mongoDatabase);
+                mongoDatabase,
+                collectionName);
     }
 }
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
new file mode 100644
index 00000000000..57ceee3eb38
--- /dev/null
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
@@ -0,0 +1,100 @@
+package org.apache.logging.log4j.mongodb;
+
+import com.mongodb.MongoNamespace;
+import com.mongodb.client.MongoClient;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.MongoDatabase;
+import org.apache.logging.log4j.plugins.util.Assert;
+import org.bson.Document;
+import org.junit.Before;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+
+class MongoDbProviderTest {
+
+    private String validConnectionString = "mongodb://localhost:27017";
+    private String invalidConnectionString = "test:test";
+
+    @Mock
+    private MongoDatabase mockDB;
+
+    @Mock
+    private MongoCollection<Document> mockCollection;
+
+    @Mock
+    private MongoClient mockClient;
+
+    @Mock
+    private MongoNamespace mockNamespace;
+
+    @Before
+    public void initMocks(){
+        when(mockClient.getDatabase(anyString())).thenReturn(mockDB);
+
+    }
+
+
+
+    @Test
+    void databaseNameAndCollectionNameProvided() {
+        String collectionName = "logsTest";
+        String databaseName = "loggingTest";
+
+        MongoCollection mockCollection = mock(MongoCollection.class);
+        MongoNamespace mockNamespace = mock(MongoNamespace.class);
+        when(mockNamespace.getCollectionName()).thenReturn(collectionName);
+        when(mockNamespace.getDatabaseName()).thenReturn(databaseName);
+        when(mockCollection.getNamespace()).thenReturn(mockNamespace);
+
+
+        MongoDbProvider provider = MongoDbProvider.newBuilder()
+                .setConnectionStringSource(this.validConnectionString)
+                .setDatabaseName(databaseName)
+                .setCollectionName(collectionName)
+                .build();
+
+        assertNotNull("Returned provider is null", provider);
+        assertEquals("Collection names do not match", collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName());
+        assertEquals("Database names do not match", databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName());
+
+    }
+
+    @Test
+    void databaseNameOmitted() {
+
+    }
+
+    @Test
+    void collectionNameProvided(){
+
+
+    }
+
+    @Test
+    void collectionNameOmitted(){
+
+    }
+
+    @Test
+    void connectionStringValid(){
+
+    }
+
+    @Test
+    void connectionStringEmpty() {
+
+    }
+
+    @Test
+    void connectionStringInvalid(){
+
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.json b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.json
index 2b47690c0b5..cac61efc980 100644
--- a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.json
+++ b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.json
@@ -5,7 +5,9 @@
       "NoSql": {
         "name": "MONGO",
         "MongoDb": {
-          "connection": "mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017/logging.logs"
+          "connection": "mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017",
+          "databaseName": "logging",
+          "collectionName": "logs"
         },
         "KeyValuePair": [
           {
diff --git a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.properties b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.properties
index f0b64894e28..30713a12737 100644
--- a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.properties
+++ b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.properties
@@ -19,7 +19,10 @@
 Appenders.0.type = NoSql
 Appenders.0.name = MONGO
 Appenders.0.provider.type = MongoDB
-Appenders.0.provider.connection = mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017/logging.logs
+Appenders.0.provider.connection = mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017
+Appenders.0.provider.databaseName = logging
+Appenders.0.provider.collectionName = logs
+
 
 Appenders.0.kv[0].type = KeyValuePair
 Appenders.0.kv[0].key = startTime
diff --git a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.xml b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.xml
index cd9f458ac3a..60232ae5be6 100644
--- a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.xml
+++ b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.xml
@@ -23,7 +23,7 @@
   <Appenders>
     <!-- tag::appender[] -->
     <NoSql name="MONGO">
-      <MongoDb connection="mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017/logging.logs"/>
+      <MongoDb connection="mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017" databaseName="logging" collectionName="logs"/>
       <KeyValuePair key="startTime" value="${date:yyyy-MM-dd hh:mm:ss.SSS}"/> <!--1-->
       <KeyValuePair key="currentTime" value="$${date:yyyy-MM-dd hh:mm:ss.SSS}"/> <!--2-->
     </NoSql>
diff --git a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.yaml b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.yaml
index 2cb5df2c85f..90a8ad766d4 100644
--- a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.yaml
+++ b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo-keys.yaml
@@ -20,7 +20,9 @@ Configuration:
     NoSql:
       name: "MONGO"
       MongoDb:
-        connection: "mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017/logging.logs"
+        connection: "mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017"
+        databaseName: "logging"
+        collectionName: "logs"
       KeyValuePair:
         - key: "startTime"
           value: "${date:yyyy-MM-dd hh:mm:ss.SSS}" # <1>
diff --git a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.json b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.json
index d06b3a190f6..cf01b6a549a 100644
--- a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.json
+++ b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.json
@@ -10,7 +10,9 @@
       "NoSql": {
         "name": "MONGO",
         "MongoDb": {
-          "connection": "mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017/logging.logs"
+          "connection": "mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017",
+          "databaseName" : "logging",
+          "collectionName": "logs"
         }
       }
       // end::appender[]
diff --git a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.properties b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.properties
index 2853c83137c..c5cafac439c 100644
--- a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.properties
+++ b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.properties
@@ -22,7 +22,9 @@ Appenders.0.layout.type = JsonTemplateLayout
 Appenders.1.type = NoSql
 Appenders.1.name = MONGO
 Appenders.1.provider.type = MongoDB
-Appenders.1.provider.connection = mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017/logging.logs
+Appenders.1.provider.connection = mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017
+Appenders.1.provider.databaseName = logging
+Appenders.1.provider.collectionName = logs
 # end::appender[]
 # tag::loggers[]
 
diff --git a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.xml b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.xml
index 31fe89f2f19..e05746405d6 100644
--- a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.xml
+++ b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.xml
@@ -27,7 +27,7 @@
     </File>
     <!-- tag::appender[] -->
     <NoSql name="MONGO">
-      <MongoDb connection="mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017/logging.logs"/>
+      <MongoDb connection="mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017" databaseName="logging" collectionName="logs"/>
     </NoSql>
     <!-- end::appender[] -->
   </Appenders>
diff --git a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.yaml b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.yaml
index f5bd4b66121..6469b81593c 100644
--- a/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.yaml
+++ b/src/site/antora/modules/ROOT/examples/manual/appenders/database/nosql-mongo.yaml
@@ -24,7 +24,9 @@ Configuration:
     NoSql:
       name: "MONGO"
       MongoDb:
-        connection: "mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017/logging.logs"
+        connection: "mongodb://${env:DB_USER}:${env:DB_PASS}@localhost:27017"
+        databaseName: "logging"
+        collectionName: "logs"
     # end::appender[]
   Loggers:
     # tag::loggers[]
diff --git a/src/site/antora/modules/ROOT/pages/manual/appenders/database.adoc b/src/site/antora/modules/ROOT/pages/manual/appenders/database.adoc
index 079891da044..62b4ad35c2b 100644
--- a/src/site/antora/modules/ROOT/pages/manual/appenders/database.adoc
+++ b/src/site/antora/modules/ROOT/pages/manual/appenders/database.adoc
@@ -817,6 +817,28 @@ for its format.
 
 **Required**
 
+| [[MongoDbProvider-attr-databaseName]]databaseName
+| 'string'
+|
+|
+It specifies the name of the database for the logger to use.
+
+Overrides the value provided in the connection string if present.
+
+**Required**
+
+| [[MongoDbProvider-attr-collectionName]]collectionName
+| 'string'
+|
+|
+It pecifies the name of the collection for the logger to use.
+
+Overrides the value provided in the connection string if present.
+
+**Required**
+
+
+
 | [[MongoDbProvider-attr-capped]]capped
 | `boolean`
 | `false`

From b746300c6b4058a1ba85553c7e8bf620dbf3dbf1 Mon Sep 17 00:00:00 2001
From: Josh Smith <jesmith17@gmail.com>
Date: Sat, 28 Dec 2024 22:06:25 -0600
Subject: [PATCH 05/10] Added unit tests for MongoDbProvider

---
 log4j-mongodb/pom.xml                         |  10 +-
 .../log4j/mongodb/MongoDbConnection.java      |   8 +-
 .../log4j/mongodb/MongoDbProviderTest.java    | 110 ++++++++++--------
 3 files changed, 65 insertions(+), 63 deletions(-)

diff --git a/log4j-mongodb/pom.xml b/log4j-mongodb/pom.xml
index a4c329fb853..ce0c72f14fd 100644
--- a/log4j-mongodb/pom.xml
+++ b/log4j-mongodb/pom.xml
@@ -76,6 +76,7 @@
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
+      <version>3.0.0-SNAPSHOT</version>
     </dependency>
 
     <dependency>
@@ -146,13 +147,6 @@
           <artifactId>junit</artifactId>
           <scope>test</scope>
       </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-junit-jupiter</artifactId>
-      <version>5.14.2</version>
-      <scope>test</scope>
-    </dependency>
-
   </dependencies>
 
   <build>
@@ -162,7 +156,7 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
-          <skip>true</skip>
+          <skip>false</skip>
         </configuration>
         <dependencies>
 
diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java
index e3db2751638..ea8f52a23d4 100644
--- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java
+++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java
@@ -109,12 +109,12 @@ public String toString() {
                 "Mongo4Connection [collection=%s, mongoClient=%s]", collection, mongoClient);
     }
 
+    /*
+     * This method is exposed to help support unit tests for the MongoDbProvider class.
+     *
+     */
     public MongoCollection<Document> getCollection(){
         return this.collection;
     }
 
-    public MongoClient getMongoClient(){
-        return this.mongoClient;
-    }
-
 }
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
index 57ceee3eb38..3bcb294701c 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
@@ -1,100 +1,108 @@
 package org.apache.logging.log4j.mongodb;
 
-import com.mongodb.MongoNamespace;
-import com.mongodb.client.MongoClient;
-import com.mongodb.client.MongoCollection;
-import com.mongodb.client.MongoDatabase;
-import org.apache.logging.log4j.plugins.util.Assert;
-import org.bson.Document;
-import org.junit.Before;
 import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
 
-import static org.junit.Assert.*;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 
 class MongoDbProviderTest {
 
-    private String validConnectionString = "mongodb://localhost:27017";
+    private String validConnectionStringWithoutDatabase = "mongodb://localhost:27017";
     private String invalidConnectionString = "test:test";
+    private String validConnectionStringWithDatabase = "mongodb://localhost:27017/logging";
+    private String validConnectionStringWithDatabaseAndCollection = "mongodb://localhost:27017/logging.logs";
 
-    @Mock
-    private MongoDatabase mockDB;
+    private String collectionName = "logsTest";
+    private String databaseName = "loggingTest";
 
-    @Mock
-    private MongoCollection<Document> mockCollection;
 
-    @Mock
-    private MongoClient mockClient;
 
-    @Mock
-    private MongoNamespace mockNamespace;
 
-    @Before
-    public void initMocks(){
-        when(mockClient.getDatabase(anyString())).thenReturn(mockDB);
+    @Test
+    void createProviderWithDatabaseAndCollectionProvidedViaConfig() {
 
-    }
+        MongoDbProvider provider = MongoDbProvider.newBuilder()
+                .setConnectionStringSource(this.validConnectionStringWithoutDatabase)
+                .setDatabaseName(this.databaseName)
+                .setCollectionName(this.collectionName)
+                .build();
 
+        assertNotNull("Returned provider is null", provider);
+        assertEquals("Collection names do not match", this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName());
+        assertEquals("Database names do not match", this.databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName());
 
+    }
 
     @Test
-    void databaseNameAndCollectionNameProvided() {
-        String collectionName = "logsTest";
-        String databaseName = "loggingTest";
-
-        MongoCollection mockCollection = mock(MongoCollection.class);
-        MongoNamespace mockNamespace = mock(MongoNamespace.class);
-        when(mockNamespace.getCollectionName()).thenReturn(collectionName);
-        when(mockNamespace.getDatabaseName()).thenReturn(databaseName);
-        when(mockCollection.getNamespace()).thenReturn(mockNamespace);
-
+    void createProviderWithoutDatabaseName() {
 
         MongoDbProvider provider = MongoDbProvider.newBuilder()
-                .setConnectionStringSource(this.validConnectionString)
-                .setDatabaseName(databaseName)
-                .setCollectionName(collectionName)
+                .setConnectionStringSource(this.validConnectionStringWithoutDatabase)
                 .build();
 
-        assertNotNull("Returned provider is null", provider);
-        assertEquals("Collection names do not match", collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName());
-        assertEquals("Database names do not match", databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName());
+        assertNull("Provider should be null but was not", provider);
+
 
     }
 
     @Test
-    void databaseNameOmitted() {
+    void createProviderWithoutDatabaseNameWithCollectionName(){
 
-    }
+        MongoDbProvider provider = MongoDbProvider.newBuilder()
+                .setConnectionStringSource(this.validConnectionStringWithoutDatabase)
+                .setCollectionName(this.collectionName)
+                .build();
+
+        assertNull("Provider should be null but was not", provider);
 
-    @Test
-    void collectionNameProvided(){
 
 
     }
 
     @Test
-    void collectionNameOmitted(){
+    void createProviderWithoutCollectionName(){
 
-    }
+        MongoDbProvider provider = MongoDbProvider.newBuilder()
+                .setConnectionStringSource(this.validConnectionStringWithoutDatabase)
+                .setDatabaseName(this.databaseName)
+                .build();
+
+        assertNull("Provider should be null but was not", provider);
 
-    @Test
-    void connectionStringValid(){
 
     }
 
     @Test
-    void connectionStringEmpty() {
+    void createProviderWithDatabaseOnConnectionString(){
+        MongoDbProvider provider = MongoDbProvider.newBuilder()
+                .setConnectionStringSource(this.validConnectionStringWithDatabase)
+                .setCollectionName(this.collectionName)
+                .build();
+
+        assertNotNull("Provider should be null but was not", provider);
+        assertEquals("Collection names do not match", this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName());
+        assertEquals("Database names do not match", "logging", provider.getConnection().getCollection().getNamespace().getDatabaseName());
 
     }
 
     @Test
-    void connectionStringInvalid(){
+    void createProviderConfigOverridesConnectionString() {
+
+        MongoDbProvider provider = MongoDbProvider.newBuilder()
+                .setConnectionStringSource(this.validConnectionStringWithDatabaseAndCollection)
+                .setCollectionName(this.collectionName)
+                .setDatabaseName(this.databaseName)
+                .build();
+
+        assertNotNull("Provider should not be null", provider);
+        assertEquals("Collection name does not match provided configuration", this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName());
+        assertEquals("Database name does not match provided configuration", this.databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName());
 
     }
 
 
+
+
 }
\ No newline at end of file

From 3bd99b7a514f28b2afa4c4bb5712ec4b5b02bd78 Mon Sep 17 00:00:00 2001
From: Josh Smith <jesmith17@gmail.com>
Date: Sun, 29 Dec 2024 09:58:37 -0600
Subject: [PATCH 06/10] Cleanup on documentation and updates to JUnit 5 from 4.
 Removed extraneous dependencies.

---
 log4j-mongodb/pom.xml                         |  6 ----
 .../log4j/mongodb/MongoDbProvider.java        |  4 +--
 .../log4j/mongodb/MongoDbProviderTest.java    | 31 +++++++++----------
 .../ROOT/pages/manual/appenders/database.adoc |  9 +++---
 4 files changed, 21 insertions(+), 29 deletions(-)

diff --git a/log4j-mongodb/pom.xml b/log4j-mongodb/pom.xml
index ce0c72f14fd..dcac5e620ec 100644
--- a/log4j-mongodb/pom.xml
+++ b/log4j-mongodb/pom.xml
@@ -76,7 +76,6 @@
     <dependency>
       <groupId>org.apache.logging.log4j</groupId>
       <artifactId>log4j-api</artifactId>
-      <version>3.0.0-SNAPSHOT</version>
     </dependency>
 
     <dependency>
@@ -142,11 +141,6 @@
       <artifactId>junit-jupiter-api</artifactId>
       <scope>test</scope>
     </dependency>
-      <dependency>
-          <groupId>junit</groupId>
-          <artifactId>junit</artifactId>
-          <scope>test</scope>
-      </dependency>
   </dependencies>
 
   <build>
diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
index 44b79ef5d71..d18bd865405 100644
--- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
+++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
@@ -77,7 +77,6 @@ public MongoDbProvider build() {
             // Validate the provided databaseName property
             try {
                 MongoNamespace.checkDatabaseNameValidity(effectiveDatabaseName);
-                databaseName = effectiveDatabaseName;
             } catch (final IllegalArgumentException e) {
                 LOGGER.error("Invalid MongoDB database name `{}`.", effectiveDatabaseName, e);
                 return null;
@@ -85,13 +84,12 @@ public MongoDbProvider build() {
             // Validate the provided collectionName property
             try {
                 MongoNamespace.checkCollectionNameValidity(effectiveCollectionName);
-                collectionName = effectiveCollectionName;
             } catch (final IllegalArgumentException e) {
                 LOGGER.error("Invalid MongoDB collection name `{}`.", effectiveCollectionName, e);
                 return null;
             }
 
-            return new MongoDbProvider(connectionString, capped, collectionSize, databaseName, collectionName);
+            return new MongoDbProvider(connectionString, capped, collectionSize, effectiveDatabaseName, effectiveCollectionName);
         }
 
         public B setConnectionStringSource(final String connectionStringSource) {
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
index 3bcb294701c..e775c691fc8 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
@@ -2,15 +2,14 @@
 
 import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 
 class MongoDbProviderTest {
 
     private String validConnectionStringWithoutDatabase = "mongodb://localhost:27017";
-    private String invalidConnectionString = "test:test";
     private String validConnectionStringWithDatabase = "mongodb://localhost:27017/logging";
     private String validConnectionStringWithDatabaseAndCollection = "mongodb://localhost:27017/logging.logs";
 
@@ -29,9 +28,9 @@ void createProviderWithDatabaseAndCollectionProvidedViaConfig() {
                 .setCollectionName(this.collectionName)
                 .build();
 
-        assertNotNull("Returned provider is null", provider);
-        assertEquals("Collection names do not match", this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName());
-        assertEquals("Database names do not match", this.databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName());
+        assertNotNull(provider, "Returned provider is null");
+        assertEquals(this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName(), "Collection names do not match");
+        assertEquals( this.databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName(), "Database names do not match");
 
     }
 
@@ -42,7 +41,7 @@ void createProviderWithoutDatabaseName() {
                 .setConnectionStringSource(this.validConnectionStringWithoutDatabase)
                 .build();
 
-        assertNull("Provider should be null but was not", provider);
+        assertNull( provider, "Provider should be null but was not");
 
 
     }
@@ -55,7 +54,7 @@ void createProviderWithoutDatabaseNameWithCollectionName(){
                 .setCollectionName(this.collectionName)
                 .build();
 
-        assertNull("Provider should be null but was not", provider);
+        assertNull(provider,"Provider should be null but was not");
 
 
 
@@ -69,7 +68,7 @@ void createProviderWithoutCollectionName(){
                 .setDatabaseName(this.databaseName)
                 .build();
 
-        assertNull("Provider should be null but was not", provider);
+        assertNull(provider,"Provider should be null but was not");
 
 
     }
@@ -81,9 +80,9 @@ void createProviderWithDatabaseOnConnectionString(){
                 .setCollectionName(this.collectionName)
                 .build();
 
-        assertNotNull("Provider should be null but was not", provider);
-        assertEquals("Collection names do not match", this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName());
-        assertEquals("Database names do not match", "logging", provider.getConnection().getCollection().getNamespace().getDatabaseName());
+        assertNotNull(provider,"Provider should not be null");
+        assertEquals(this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName(), "Provider should be null but was not");
+        assertEquals( "logging", provider.getConnection().getCollection().getNamespace().getDatabaseName(),"Database names do not match");
 
     }
 
@@ -96,9 +95,9 @@ void createProviderConfigOverridesConnectionString() {
                 .setDatabaseName(this.databaseName)
                 .build();
 
-        assertNotNull("Provider should not be null", provider);
-        assertEquals("Collection name does not match provided configuration", this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName());
-        assertEquals("Database name does not match provided configuration", this.databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName());
+        assertNotNull(provider,"Provider should not be null");
+        assertEquals(this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName(), "Collection name does not match provided configuration");
+        assertEquals(this.databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName(), "Database name does not match provided configuration");
 
     }
 
diff --git a/src/site/antora/modules/ROOT/pages/manual/appenders/database.adoc b/src/site/antora/modules/ROOT/pages/manual/appenders/database.adoc
index 62b4ad35c2b..09503ec45a5 100644
--- a/src/site/antora/modules/ROOT/pages/manual/appenders/database.adoc
+++ b/src/site/antora/modules/ROOT/pages/manual/appenders/database.adoc
@@ -821,7 +821,7 @@ for its format.
 | 'string'
 |
 |
-It specifies the name of the database for the logger to use.
+It specifies the name of the database for the appender to use.
 
 Overrides the value provided in the connection string if present.
 
@@ -831,9 +831,10 @@ Overrides the value provided in the connection string if present.
 | 'string'
 |
 |
-It pecifies the name of the collection for the logger to use.
-
-Overrides the value provided in the connection string if present.
+It specifies the name of the collection for the appender to use.
+For backward compatibility, the collection name can also be specified in the
+https://mongodb.github.io/mongo-java-driver/5.0/apidocs/mongodb-driver-core/com/mongodb/ConnectionString.html[Java-specific connection string]
+If collection name is specified in both places, the value provided here will be used.
 
 **Required**
 

From 73b96f23f6473bd7a4252769ddff564db3051edc Mon Sep 17 00:00:00 2001
From: Josh Smith <jesmith17@gmail.com>
Date: Sun, 29 Dec 2024 10:14:17 -0600
Subject: [PATCH 07/10] Updated example config files to use new configuration
 options

---
 log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml | 2 +-
 log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml    | 2 +-
 log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml      | 4 +++-
 log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml     | 4 +++-
 log4j-mongodb/src/test/resources/MongoDbIT.xml               | 2 +-
 log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml     | 2 +-
 6 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml b/log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml
index 600296753eb..07047334424 100644
--- a/log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbAdditionalFields.xml
@@ -22,7 +22,7 @@
                    https://logging.apache.org/xml/ns/log4j-config-3.xsd">
   <Appenders>
     <NoSql name="MONGO">
-      <MongoDb connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbAdditionalFieldsIT"/>
+      <MongoDb connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}" databaseName="testDb" collectionName="MongoDbAdditionalFieldsIT"/>
       <KeyValuePair key="A" value="1"/>
       <KeyValuePair key="B" value="2"/>
       <KeyValuePair key="env1" value="${env:PATH}"/>
diff --git a/log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml b/log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml
index 797dfb47ed7..03df1ab9f33 100644
--- a/log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbAuthFailureIT.xml
@@ -23,7 +23,7 @@
   <Appenders>
     <NoSql name="MONGO">
       <MongoDb
-        connection="mongodb://log4jUser:12345678@localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbAuthFailureIT" />
+        connection="mongodb://log4jUser:12345678@localhost:${sys:log4j.mongo.port:-27017}"  databaseName="testDb" collectionName="MongoDbAuthFailureIT" />
     </NoSql>
   </Appenders>
   <Loggers>
diff --git a/log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml b/log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml
index f1574d396ae..645cac894a8 100644
--- a/log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbCappedIntIT.xml
@@ -23,7 +23,9 @@
   <Appenders>
     <NoSql name="MONGO">
       <MongoDb
-        connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbCappedIntIT"
+        connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}"
+        databaseName="testDb"
+        collectionName="MongoDbCappedIntIT"
         capped="true"
         collectionSize="1073741824"/>
     </NoSql>
diff --git a/log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml b/log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml
index 0ac524fdea7..16de25d2619 100644
--- a/log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbCappedLongIT.xml
@@ -24,7 +24,9 @@
     <NoSql name="MONGO">
       <!-- collectionSize="2147483657" is max int + 10 -->
       <MongoDb
-        connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbCappedLongIT"
+        connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}"
+        databaseName="testDb"
+        collectionName="MongoDbCappedLongIT"
         capped="true"
         collectionSize="2147483657"/>
     </NoSql>
diff --git a/log4j-mongodb/src/test/resources/MongoDbIT.xml b/log4j-mongodb/src/test/resources/MongoDbIT.xml
index df713f01795..2ed62df6fe7 100644
--- a/log4j-mongodb/src/test/resources/MongoDbIT.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbIT.xml
@@ -22,7 +22,7 @@
                    https://logging.apache.org/xml/ns/log4j-config-3.xsd">
   <Appenders>
     <NoSql name="MONGO">
-      <MongoDb connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbIT" />
+      <MongoDb connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}" collectionName="MongoDbIT" databaseName="testDb" />
     </NoSql>
   </Appenders>
   <Loggers>
diff --git a/log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml b/log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml
index 774fa4bfaed..64bb492a720 100644
--- a/log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbMapMessageIT.xml
@@ -22,7 +22,7 @@
                    https://logging.apache.org/xml/ns/log4j-config-3.xsd">
   <Appenders>
     <NoSql name="MONGO">
-      <MongoDb connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb.MongoDbMapMessageIT" />
+      <MongoDb connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}" databaseName="testDb" collectionName="MongoDbMapMessageIT" />
       <MessageLayout />
     </NoSql>
   </Appenders>

From c1dd909d7c5238db1b7882a14cd836e5b3c3f7b2 Mon Sep 17 00:00:00 2001
From: "Piotr P. Karwasz" <piotr@github.copernik.eu>
Date: Sun, 29 Dec 2024 19:53:14 +0100
Subject: [PATCH 08/10] Update
 src/changelog/.3.x.x/update_org_log4j_mongodb.xml

---
 src/changelog/.3.x.x/update_org_log4j_mongodb.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/changelog/.3.x.x/update_org_log4j_mongodb.xml b/src/changelog/.3.x.x/update_org_log4j_mongodb.xml
index cf632d89059..2f7c1f37760 100644
--- a/src/changelog/.3.x.x/update_org_log4j_mongodb.xml
+++ b/src/changelog/.3.x.x/update_org_log4j_mongodb.xml
@@ -2,7 +2,7 @@
 <entry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="https://logging.apache.org/xml/ns"
        xsi:schemaLocation="https://logging.apache.org/xml/ns https://logging.apache.org/xml/ns/log4j-changelog-0.xsd"
-       type="updated">
-  <issue id="3321" link="https://github.com/apache/logging-log4j2/pull/3321"/>
+       type="added">
+  <issue id="3321" link="https://github.com/apache/logging-log4j2/discussions/3321"/>
   <description format="asciidoc">Update log4j-mongodb to allow collectionName and databaseName to be defined via the config file</description>
 </entry>

From a6dcb4fa07daf0cd273f0714bb6576086ac48be2 Mon Sep 17 00:00:00 2001
From: "Piotr P. Karwasz" <piotr.github@karwasz.org>
Date: Sun, 29 Dec 2024 19:54:50 +0100
Subject: [PATCH 09/10] Formatting

---
 .../log4j/mongodb/MongoDbConnection.java      | 11 +--
 .../log4j/mongodb/MongoDbProvider.java        | 12 ++-
 .../log4j/mongodb/MongoDbProviderTest.java    | 84 +++++++++++--------
 3 files changed, 62 insertions(+), 45 deletions(-)

diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java
index ea8f52a23d4..2b53911088c 100644
--- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java
+++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java
@@ -16,7 +16,6 @@
  */
 package org.apache.logging.log4j.mongodb;
 
-import com.mongodb.ConnectionString;
 import com.mongodb.MongoException;
 import com.mongodb.client.MongoClient;
 import com.mongodb.client.MongoCollection;
@@ -59,7 +58,6 @@ private static MongoCollection<Document> getOrCreateMongoCollection(
         }
     }
 
-
     private final MongoCollection<Document> collection;
     private final MongoClient mongoClient;
 
@@ -70,8 +68,7 @@ public MongoDbConnection(
             final boolean isCapped,
             final Long sizeInBytes) {
         this.mongoClient = mongoClient;
-        this.collection =
-                getOrCreateMongoCollection(mongoDatabase, collectionName, isCapped, sizeInBytes);
+        this.collection = getOrCreateMongoCollection(mongoDatabase, collectionName, isCapped, sizeInBytes);
     }
 
     @Override
@@ -105,16 +102,14 @@ public void insertObject(final NoSqlObject<Document> object) {
 
     @Override
     public String toString() {
-        return String.format(
-                "Mongo4Connection [collection=%s, mongoClient=%s]", collection, mongoClient);
+        return String.format("Mongo4Connection [collection=%s, mongoClient=%s]", collection, mongoClient);
     }
 
     /*
      * This method is exposed to help support unit tests for the MongoDbProvider class.
      *
      */
-    public MongoCollection<Document> getCollection(){
+    public MongoCollection<Document> getCollection() {
         return this.collection;
     }
-
 }
diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
index d18bd865405..5b31d6f89ba 100644
--- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
+++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java
@@ -73,7 +73,7 @@ public MongoDbProvider build() {
             }
 
             String effectiveDatabaseName = databaseName != null ? databaseName : connectionString.getDatabase();
-            String effectiveCollectionName = collectionName != null ? collectionName: connectionString.getCollection();
+            String effectiveCollectionName = collectionName != null ? collectionName : connectionString.getCollection();
             // Validate the provided databaseName property
             try {
                 MongoNamespace.checkDatabaseNameValidity(effectiveDatabaseName);
@@ -89,7 +89,8 @@ public MongoDbProvider build() {
                 return null;
             }
 
-            return new MongoDbProvider(connectionString, capped, collectionSize, effectiveDatabaseName, effectiveCollectionName);
+            return new MongoDbProvider(
+                    connectionString, capped, collectionSize, effectiveDatabaseName, effectiveCollectionName);
         }
 
         public B setConnectionStringSource(final String connectionStringSource) {
@@ -142,7 +143,12 @@ public static <B extends Builder<B>> B newBuilder() {
     private final MongoDatabase mongoDatabase;
     private final ConnectionString connectionString;
 
-    private MongoDbProvider(final ConnectionString connectionString, final boolean isCapped, final Long collectionSize, final String databaseName, final String collectionName) {
+    private MongoDbProvider(
+            final ConnectionString connectionString,
+            final boolean isCapped,
+            final Long collectionSize,
+            final String databaseName,
+            final String collectionName) {
 
         LOGGER.debug("Created ConnectionString {}", connectionString);
         this.connectionString = connectionString;
diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
index e775c691fc8..093c84dbecb 100644
--- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
+++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbProviderTest.java
@@ -1,11 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.logging.log4j.mongodb;
 
-import org.junit.jupiter.api.Test;
-
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
+import org.junit.jupiter.api.Test;
 
 class MongoDbProviderTest {
 
@@ -16,9 +31,6 @@ class MongoDbProviderTest {
     private String collectionName = "logsTest";
     private String databaseName = "loggingTest";
 
-
-
-
     @Test
     void createProviderWithDatabaseAndCollectionProvidedViaConfig() {
 
@@ -29,9 +41,14 @@ void createProviderWithDatabaseAndCollectionProvidedViaConfig() {
                 .build();
 
         assertNotNull(provider, "Returned provider is null");
-        assertEquals(this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName(), "Collection names do not match");
-        assertEquals( this.databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName(), "Database names do not match");
-
+        assertEquals(
+                this.collectionName,
+                provider.getConnection().getCollection().getNamespace().getCollectionName(),
+                "Collection names do not match");
+        assertEquals(
+                this.databaseName,
+                provider.getConnection().getCollection().getNamespace().getDatabaseName(),
+                "Database names do not match");
     }
 
     @Test
@@ -41,49 +58,47 @@ void createProviderWithoutDatabaseName() {
                 .setConnectionStringSource(this.validConnectionStringWithoutDatabase)
                 .build();
 
-        assertNull( provider, "Provider should be null but was not");
-
-
+        assertNull(provider, "Provider should be null but was not");
     }
 
     @Test
-    void createProviderWithoutDatabaseNameWithCollectionName(){
+    void createProviderWithoutDatabaseNameWithCollectionName() {
 
         MongoDbProvider provider = MongoDbProvider.newBuilder()
                 .setConnectionStringSource(this.validConnectionStringWithoutDatabase)
                 .setCollectionName(this.collectionName)
                 .build();
 
-        assertNull(provider,"Provider should be null but was not");
-
-
-
+        assertNull(provider, "Provider should be null but was not");
     }
 
     @Test
-    void createProviderWithoutCollectionName(){
+    void createProviderWithoutCollectionName() {
 
         MongoDbProvider provider = MongoDbProvider.newBuilder()
                 .setConnectionStringSource(this.validConnectionStringWithoutDatabase)
                 .setDatabaseName(this.databaseName)
                 .build();
 
-        assertNull(provider,"Provider should be null but was not");
-
-
+        assertNull(provider, "Provider should be null but was not");
     }
 
     @Test
-    void createProviderWithDatabaseOnConnectionString(){
+    void createProviderWithDatabaseOnConnectionString() {
         MongoDbProvider provider = MongoDbProvider.newBuilder()
                 .setConnectionStringSource(this.validConnectionStringWithDatabase)
                 .setCollectionName(this.collectionName)
                 .build();
 
-        assertNotNull(provider,"Provider should not be null");
-        assertEquals(this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName(), "Provider should be null but was not");
-        assertEquals( "logging", provider.getConnection().getCollection().getNamespace().getDatabaseName(),"Database names do not match");
-
+        assertNotNull(provider, "Provider should not be null");
+        assertEquals(
+                this.collectionName,
+                provider.getConnection().getCollection().getNamespace().getCollectionName(),
+                "Provider should be null but was not");
+        assertEquals(
+                "logging",
+                provider.getConnection().getCollection().getNamespace().getDatabaseName(),
+                "Database names do not match");
     }
 
     @Test
@@ -95,13 +110,14 @@ void createProviderConfigOverridesConnectionString() {
                 .setDatabaseName(this.databaseName)
                 .build();
 
-        assertNotNull(provider,"Provider should not be null");
-        assertEquals(this.collectionName, provider.getConnection().getCollection().getNamespace().getCollectionName(), "Collection name does not match provided configuration");
-        assertEquals(this.databaseName, provider.getConnection().getCollection().getNamespace().getDatabaseName(), "Database name does not match provided configuration");
-
+        assertNotNull(provider, "Provider should not be null");
+        assertEquals(
+                this.collectionName,
+                provider.getConnection().getCollection().getNamespace().getCollectionName(),
+                "Collection name does not match provided configuration");
+        assertEquals(
+                this.databaseName,
+                provider.getConnection().getCollection().getNamespace().getDatabaseName(),
+                "Database name does not match provided configuration");
     }
-
-
-
-
-}
\ No newline at end of file
+}

From bd66bc70a4a352a56333c1ee1d8eca891b2a4905 Mon Sep 17 00:00:00 2001
From: Josh Smith <jesmith17@gmail.com>
Date: Tue, 11 Feb 2025 16:51:41 -0600
Subject: [PATCH 10/10] Fixed type in one of the IT tests that was causing it
 to fail

---
 log4j-mongodb/src/test/resources/MongoDbCollectionNameIT.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/log4j-mongodb/src/test/resources/MongoDbCollectionNameIT.xml b/log4j-mongodb/src/test/resources/MongoDbCollectionNameIT.xml
index 2f2dcc3d7c9..ef84c991cae 100644
--- a/log4j-mongodb/src/test/resources/MongoDbCollectionNameIT.xml
+++ b/log4j-mongodb/src/test/resources/MongoDbCollectionNameIT.xml
@@ -26,7 +26,7 @@
         connection="mongodb://localhost:${sys:log4j.mongo.port:-27017}/testDb"
         capped="true"
         collectionSize="1073741824"
-        collectionName="MongoDBCollectionNameIT"/>
+        collectionName="MongoDbCollectionNameIT"/>
     </NoSql>
   </Appenders>
   <Loggers>