diff --git a/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4Connection.java b/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4Connection.java index 06162a64d26..bbce8a9cb54 100644 --- a/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4Connection.java +++ b/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4Connection.java @@ -39,7 +39,7 @@ public final class MongoDb4Connection extends AbstractNoSqlConnection getOrCreateMongoCollection(final MongoDatabase database, - final String collectionName, final boolean isCapped, final Integer sizeInBytes) { + final String collectionName, final boolean isCapped, final Long sizeInBytes) { try { LOGGER.debug("Gettting collection '{}'...", collectionName); // throws IllegalArgumentException if collectionName is invalid @@ -66,6 +66,11 @@ private static MongoCollection getOrCreateMongoCollection(final MongoD public MongoDb4Connection(final ConnectionString connectionString, final MongoClient mongoClient, final MongoDatabase mongoDatabase, final boolean isCapped, final Integer sizeInBytes) { + this(connectionString, mongoClient, mongoDatabase, isCapped, Long.valueOf(sizeInBytes)); + } + + public MongoDb4Connection(final ConnectionString connectionString, final MongoClient mongoClient, + final MongoDatabase mongoDatabase, final boolean isCapped, final Long sizeInBytes) { this.connectionString = connectionString; this.mongoClient = mongoClient; this.collection = getOrCreateMongoCollection(mongoDatabase, connectionString.getCollection(), isCapped, diff --git a/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4Provider.java b/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4Provider.java index 03bf0df984c..558ab7a5dad 100644 --- a/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4Provider.java +++ b/log4j-mongodb4/src/main/java/org/apache/logging/log4j/mongodb4/MongoDb4Provider.java @@ -48,7 +48,7 @@ public static class Builder> extends AbstractFilterable.Bui private String connectionStringSource; @PluginBuilderAttribute - private int collectionSize = DEFAULT_COLLECTION_SIZE; + private long collectionSize = DEFAULT_COLLECTION_SIZE; @PluginBuilderAttribute("capped") private boolean capped = false; @@ -72,7 +72,12 @@ public B setCollectionSize(final int collectionSize) { this.collectionSize = collectionSize; return asBuilder(); } - } + + public B setCollectionSize(final long collectionSize) { + this.collectionSize = collectionSize; + return asBuilder(); + } +} private static final Logger LOGGER = StatusLogger.getLogger(); @@ -84,21 +89,21 @@ public B setCollectionSize(final int collectionSize) { // @formatter:on // TODO Where does this number come from? - private static final int DEFAULT_COLLECTION_SIZE = 536_870_912; + private static final long DEFAULT_COLLECTION_SIZE = 536_870_912; @PluginBuilderFactory public static > B newBuilder() { return new Builder().asBuilder(); } - private final Integer collectionSize; + private final Long collectionSize; private final boolean isCapped; private final MongoClient mongoClient; private final MongoDatabase mongoDatabase; private final ConnectionString connectionString; private MongoDb4Provider(final String connectionStringSource, final boolean isCapped, - final Integer collectionSize) { + final Long collectionSize) { LOGGER.debug("Creating ConnectionString {}...", connectionStringSource); this.connectionString = new ConnectionString(connectionStringSource); LOGGER.debug("Created ConnectionString {}", connectionString); diff --git a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedTest.java b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/AbstractMongoDb4CappedTest.java similarity index 88% rename from log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedTest.java rename to log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/AbstractMongoDb4CappedTest.java index 2bfa1abe18e..6f54e77c7e3 100644 --- a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedTest.java +++ b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/AbstractMongoDb4CappedTest.java @@ -21,18 +21,15 @@ import com.mongodb.client.MongoDatabase; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.LoggerContext; -import org.apache.logging.log4j.core.test.junit.LoggerContextSource; import org.bson.Document; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -@UsingMongoDb4 -@LoggerContextSource("log4j2-mongodb-capped.xml") -public class MongoDb4CappedTest { +public abstract class AbstractMongoDb4CappedTest { @Test public void test(final LoggerContext ctx, final MongoClient mongoClient) { - final Logger logger = ctx.getLogger(MongoDb4CappedTest.class); + final Logger logger = ctx.getLogger(AbstractMongoDb4CappedTest.class); logger.info("Hello log"); final MongoDatabase database = mongoClient.getDatabase(MongoDb4TestConstants.DATABASE_NAME); Assertions.assertNotNull(database); diff --git a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedIntTest.java b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedIntTest.java new file mode 100644 index 00000000000..e01e0c0d63b --- /dev/null +++ b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedIntTest.java @@ -0,0 +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.mongodb4; + +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; + +@UsingMongoDb4 +@LoggerContextSource("log4j2-mongodb-capped-int.xml") +public class MongoDb4CappedIntTest extends AbstractMongoDb4CappedTest { + + // test is in superclass +} diff --git a/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedLongTest.java b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedLongTest.java new file mode 100644 index 00000000000..0a99dbf5b87 --- /dev/null +++ b/log4j-mongodb4/src/test/java/org/apache/logging/log4j/mongodb4/MongoDb4CappedLongTest.java @@ -0,0 +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.mongodb4; + +import org.apache.logging.log4j.core.test.junit.LoggerContextSource; + +@UsingMongoDb4 +@LoggerContextSource("log4j2-mongodb-capped-long.xml") +public class MongoDb4CappedLongTest extends AbstractMongoDb4CappedTest { + + // test is in superclass +} diff --git a/log4j-mongodb4/src/test/resources/log4j2-mongodb-capped.xml b/log4j-mongodb4/src/test/resources/log4j2-mongodb-capped-int.xml similarity index 100% rename from log4j-mongodb4/src/test/resources/log4j2-mongodb-capped.xml rename to log4j-mongodb4/src/test/resources/log4j2-mongodb-capped-int.xml diff --git a/log4j-mongodb4/src/test/resources/log4j2-mongodb-capped-long.xml b/log4j-mongodb4/src/test/resources/log4j2-mongodb-capped-long.xml new file mode 100644 index 00000000000..ddde9bcb05e --- /dev/null +++ b/log4j-mongodb4/src/test/resources/log4j2-mongodb-capped-long.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + diff --git a/src/changelog/.2.x.x/1747_mongodb4-long-collection-size-conifg.xml b/src/changelog/.2.x.x/1747_mongodb4-long-collection-size-conifg.xml new file mode 100644 index 00000000000..0d680d56b0c --- /dev/null +++ b/src/changelog/.2.x.x/1747_mongodb4-long-collection-size-conifg.xml @@ -0,0 +1,28 @@ + + + + + + + + The MongoDb4 appender now supports long values to configure `collectionSize` + + diff --git a/src/site/xdoc/manual/appenders.xml b/src/site/xdoc/manual/appenders.xml index 51221220589..2e7477b9cff 100644 --- a/src/site/xdoc/manual/appenders.xml +++ b/src/site/xdoc/manual/appenders.xml @@ -2550,7 +2550,7 @@ public class JpaLogEntity extends AbstractLogEventWrapperEntity { collectionSize - int + long Specify the size in bytes of the capped collection to use if enabled. The minimum size is 4096 bytes, and larger sizes will be increased to the nearest integer multiple of 256. See the capped collection documentation linked above for more information.