http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-couchdb/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java ---------------------------------------------------------------------- diff --git a/log4j-couchdb/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java b/log4j-couchdb/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java deleted file mode 100644 index cdae592..0000000 --- a/log4j-couchdb/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/CouchDbProvider.java +++ /dev/null @@ -1,161 +0,0 @@ -/* - * 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.nosql.appender.couchdb; - -import java.lang.reflect.Method; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.config.plugins.Plugin; -import org.apache.logging.log4j.core.config.plugins.PluginAttribute; -import org.apache.logging.log4j.core.config.plugins.PluginFactory; -import org.apache.logging.log4j.core.config.plugins.convert.TypeConverters; -import org.apache.logging.log4j.core.config.plugins.validation.constraints.ValidHost; -import org.apache.logging.log4j.core.config.plugins.validation.constraints.ValidPort; -import org.apache.logging.log4j.core.util.NameUtil; -import org.apache.logging.log4j.core.appender.nosql.NoSqlProvider; -import org.apache.logging.log4j.status.StatusLogger; -import org.apache.logging.log4j.util.LoaderUtil; -import org.apache.logging.log4j.util.Strings; -import org.lightcouch.CouchDbClient; -import org.lightcouch.CouchDbProperties; - -/** - * The Apache CouchDB implementation of {@link NoSqlProvider}. - */ -@Plugin(name = "CouchDB", category = "Core", printObject = true) -public final class CouchDbProvider implements NoSqlProvider<CouchDbConnection> { - private static final int HTTP = 80; - private static final int HTTPS = 443; - private static final Logger LOGGER = StatusLogger.getLogger(); - - private final CouchDbClient client; - private final String description; - - private CouchDbProvider(final CouchDbClient client, final String description) { - this.client = client; - this.description = "couchDb{ " + description + " }"; - } - - @Override - public CouchDbConnection getConnection() { - return new CouchDbConnection(this.client); - } - - @Override - public String toString() { - return this.description; - } - - /** - * Factory method for creating an Apache CouchDB provider within the plugin manager. - * - * @param databaseName The name of the database to which log event documents will be written. - * @param protocol Either "http" or "https," defaults to "http" and mutually exclusive with - * {@code factoryClassName&factoryMethodName!=null}. - * @param server The host name of the CouchDB server, defaults to localhost and mutually exclusive with - * {@code factoryClassName&factoryMethodName!=null}. - * @param port The port that CouchDB is listening on, defaults to 80 if {@code protocol} is "http" and 443 if - * {@code protocol} is "https," and mutually exclusive with - * {@code factoryClassName&factoryMethodName!=null}. - * @param username The username to authenticate against the MongoDB server with, mutually exclusive with - * {@code factoryClassName&factoryMethodName!=null}. - * @param password The password to authenticate against the MongoDB server with, mutually exclusive with - * {@code factoryClassName&factoryMethodName!=null}. - * @param factoryClassName A fully qualified class name containing a static factory method capable of returning a - * {@link CouchDbClient} or {@link CouchDbProperties}. - * @param factoryMethodName The name of the public static factory method belonging to the aforementioned factory - * class. - * @return a new Apache CouchDB provider. - */ - @PluginFactory - public static CouchDbProvider createNoSqlProvider( - @PluginAttribute("databaseName") final String databaseName, - @PluginAttribute("protocol") String protocol, - @PluginAttribute(value = "server", defaultString = "localhost") @ValidHost final String server, - @PluginAttribute(value = "port", defaultString = "0") @ValidPort final String port, - @PluginAttribute("username") final String username, - @PluginAttribute(value = "password", sensitive = true) final String password, - @PluginAttribute("factoryClassName") final String factoryClassName, - @PluginAttribute("factoryMethodName") final String factoryMethodName) { - CouchDbClient client; - String description; - if (Strings.isNotEmpty(factoryClassName) && Strings.isNotEmpty(factoryMethodName)) { - try { - final Class<?> factoryClass = LoaderUtil.loadClass(factoryClassName); - final Method method = factoryClass.getMethod(factoryMethodName); - final Object object = method.invoke(null); - - if (object instanceof CouchDbClient) { - client = (CouchDbClient) object; - description = "uri=" + client.getDBUri(); - } else if (object instanceof CouchDbProperties) { - final CouchDbProperties properties = (CouchDbProperties) object; - client = new CouchDbClient(properties); - description = "uri=" + client.getDBUri() + ", username=" + properties.getUsername() - + ", passwordHash=" + NameUtil.md5(password + CouchDbProvider.class.getName()) - + ", maxConnections=" + properties.getMaxConnections() + ", connectionTimeout=" - + properties.getConnectionTimeout() + ", socketTimeout=" + properties.getSocketTimeout(); - } else if (object == null) { - LOGGER.error("The factory method [{}.{}()] returned null.", factoryClassName, factoryMethodName); - return null; - } else { - LOGGER.error("The factory method [{}.{}()] returned an unsupported type [{}].", factoryClassName, - factoryMethodName, object.getClass().getName()); - return null; - } - } catch (final ClassNotFoundException e) { - LOGGER.error("The factory class [{}] could not be loaded.", factoryClassName, e); - return null; - } catch (final NoSuchMethodException e) { - LOGGER.error("The factory class [{}] does not have a no-arg method named [{}].", factoryClassName, - factoryMethodName, e); - return null; - } catch (final Exception e) { - LOGGER.error("The factory method [{}.{}()] could not be invoked.", factoryClassName, factoryMethodName, - e); - return null; - } - } else if (Strings.isNotEmpty(databaseName)) { - if (protocol != null && protocol.length() > 0) { - protocol = protocol.toLowerCase(); - if (!protocol.equals("http") && !protocol.equals("https")) { - LOGGER.error("Only protocols [http] and [https] are supported, [{}] specified.", protocol); - return null; - } - } else { - protocol = "http"; - LOGGER.warn("No protocol specified, using default port [http]."); - } - - final int portInt = TypeConverters.convert(port, int.class, protocol.equals("https") ? HTTPS : HTTP); - - if (Strings.isEmpty(username) || Strings.isEmpty(password)) { - LOGGER.error("You must provide a username and password for the CouchDB provider."); - return null; - } - - client = new CouchDbClient(databaseName, false, protocol, server, portInt, username, password); - description = "uri=" + client.getDBUri() + ", username=" + username + ", passwordHash=" - + NameUtil.md5(password + CouchDbProvider.class.getName()); - } else { - LOGGER.error("No factory method was provided so the database name is required."); - return null; - } - - return new CouchDbProvider(client, description); - } -}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-couchdb/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/package-info.java ---------------------------------------------------------------------- diff --git a/log4j-couchdb/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/package-info.java b/log4j-couchdb/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/package-info.java deleted file mode 100644 index b783f87..0000000 --- a/log4j-couchdb/src/main/java/org/apache/logging/log4j/nosql/appender/couchdb/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ -/** - * The classes in this package contain the Apache CouchDB provider for the NoSQL Appender. - */ -package org.apache.logging.log4j.nosql.appender.couchdb; http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java ---------------------------------------------------------------------- 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 new file mode 100644 index 0000000..4ad0671 --- /dev/null +++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbConnection.java @@ -0,0 +1,96 @@ +/* + * 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.apache.logging.log4j.Level; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.appender.AppenderLoggingException; +import org.apache.logging.log4j.core.appender.nosql.AbstractNoSqlConnection; +import org.apache.logging.log4j.core.appender.nosql.NoSqlConnection; +import org.apache.logging.log4j.core.appender.nosql.NoSqlObject; +import org.apache.logging.log4j.status.StatusLogger; +import org.bson.BSON; +import org.bson.Transformer; + +import com.mongodb.BasicDBObject; +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.mongodb.MongoException; +import com.mongodb.WriteConcern; + +/** + * The MongoDB implementation of {@link NoSqlConnection}. + */ +public final class MongoDbConnection extends AbstractNoSqlConnection<BasicDBObject, MongoDbObject> { + + private static final Logger LOGGER = StatusLogger.getLogger(); + + static { + BSON.addEncodingHook(Level.class, new Transformer() { + @Override + public Object transform(final Object o) { + if (o instanceof Level) { + return ((Level) o).name(); + } + return o; + } + }); + } + + private final DBCollection collection; + private final WriteConcern writeConcern; + + public MongoDbConnection(final DB database, final WriteConcern writeConcern, final String collectionName, + final Boolean isCapped, final Integer collectionSize) { + if (database.collectionExists(collectionName)) { + collection = database.getCollection(collectionName); + } else { + final BasicDBObject options = new BasicDBObject(); + options.put("capped", isCapped); + options.put("size", collectionSize); + this.collection = database.createCollection(collectionName, options); + } + this.writeConcern = writeConcern; + } + + @Override + public MongoDbObject createObject() { + return new MongoDbObject(); + } + + @Override + public MongoDbObject[] createList(final int length) { + return new MongoDbObject[length]; + } + + @Override + public void insertObject(final NoSqlObject<BasicDBObject> object) { + try { + this.collection.insert(object.unwrap(), this.writeConcern); + } catch (final MongoException e) { + throw new AppenderLoggingException("Failed to write log event to MongoDB due to error: " + e.getMessage(), + e); + } + } + + @Override + public void closeImpl() { + // LOG4J2-1196 + this.collection.getDB().getMongo().close(); + } + +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbObject.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbObject.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbObject.java new file mode 100644 index 0000000..541d941 --- /dev/null +++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbObject.java @@ -0,0 +1,66 @@ +/* + * 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 java.util.Collections; + +import org.apache.logging.log4j.core.appender.nosql.NoSqlObject; + +import com.mongodb.BasicDBList; +import com.mongodb.BasicDBObject; + +/** + * The MongoDB implementation of {@link NoSqlObject}. + */ +public final class MongoDbObject implements NoSqlObject<BasicDBObject> { + private final BasicDBObject mongoObject; + + public MongoDbObject() { + this.mongoObject = new BasicDBObject(); + } + + @Override + public void set(final String field, final Object value) { + this.mongoObject.append(field, value); + } + + @Override + public void set(final String field, final NoSqlObject<BasicDBObject> value) { + this.mongoObject.append(field, value.unwrap()); + } + + @Override + public void set(final String field, final Object[] values) { + final BasicDBList list = new BasicDBList(); + Collections.addAll(list, values); + this.mongoObject.append(field, list); + } + + @Override + public void set(final String field, final NoSqlObject<BasicDBObject>[] values) { + final BasicDBList list = new BasicDBList(); + for (final NoSqlObject<BasicDBObject> value : values) { + list.add(value.unwrap()); + } + this.mongoObject.append(field, list); + } + + @Override + public BasicDBObject unwrap() { + return this.mongoObject; + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java ---------------------------------------------------------------------- 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 new file mode 100644 index 0000000..f7077b3 --- /dev/null +++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/MongoDbProvider.java @@ -0,0 +1,351 @@ +/* + * 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 java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.Core; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute; +import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory; +import org.apache.logging.log4j.core.config.plugins.PluginFactory; +import org.apache.logging.log4j.core.config.plugins.convert.TypeConverters; +import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required; +import org.apache.logging.log4j.core.config.plugins.validation.constraints.ValidHost; +import org.apache.logging.log4j.core.config.plugins.validation.constraints.ValidPort; +import org.apache.logging.log4j.core.filter.AbstractFilterable; +import org.apache.logging.log4j.core.util.NameUtil; +import org.apache.logging.log4j.core.appender.nosql.NoSqlProvider; +import org.apache.logging.log4j.status.StatusLogger; +import org.apache.logging.log4j.util.LoaderUtil; +import org.apache.logging.log4j.util.Strings; + +import com.mongodb.DB; +import com.mongodb.MongoClient; +import com.mongodb.MongoCredential; +import com.mongodb.ServerAddress; +import com.mongodb.WriteConcern; + +/** + * The MongoDB implementation of {@link NoSqlProvider}. + */ +@Plugin(name = "MongoDb", category = Core.CATEGORY_NAME, printObject = true) +public final class MongoDbProvider implements NoSqlProvider<MongoDbConnection> { + + private static final WriteConcern DEFAULT_WRITE_CONCERN = WriteConcern.ACKNOWLEDGED; + private static final Logger LOGGER = StatusLogger.getLogger(); + private static final int DEFAULT_PORT = 27017; + private static final int DEFAULT_COLLECTION_SIZE = 536870912; + + private final String collectionName; + private final DB database; + private final String description; + private final WriteConcern writeConcern; + private final boolean isCapped; + private final Integer collectionSize; + + private MongoDbProvider(final DB database, final WriteConcern writeConcern, final String collectionName, + final boolean isCapped, final Integer collectionSize, final String description) { + this.database = database; + this.writeConcern = writeConcern; + this.collectionName = collectionName; + this.isCapped = isCapped; + this.collectionSize = collectionSize; + this.description = "mongoDb{ " + description + " }"; + } + + @Override + public MongoDbConnection getConnection() { + return new MongoDbConnection(this.database, this.writeConcern, this.collectionName, this.isCapped, this.collectionSize); + } + + @Override + public String toString() { + return this.description; + } + + /** + * Factory method for creating a MongoDB provider within the plugin manager. + * + * @param collectionName The name of the MongoDB collection to which log events should be written. + * @param writeConcernConstant The {@link WriteConcern} constant to control writing details, defaults to + * {@link WriteConcern#ACKNOWLEDGED}. + * @param writeConcernConstantClassName The name of a class containing the aforementioned static WriteConcern + * constant. Defaults to {@link WriteConcern}. + * @param databaseName The name of the MongoDB database containing the collection to which log events should be + * written. Mutually exclusive with {@code factoryClassName&factoryMethodName!=null}. + * @param server The host name of the MongoDB server, defaults to localhost and mutually exclusive with + * {@code factoryClassName&factoryMethodName!=null}. + * @param port The port the MongoDB server is listening on, defaults to the default MongoDB port and mutually + * exclusive with {@code factoryClassName&factoryMethodName!=null}. + * @param userName The username to authenticate against the MongoDB server with. + * @param password The password to authenticate against the MongoDB server with. + * @param factoryClassName A fully qualified class name containing a static factory method capable of returning a + * {@link DB} or a {@link MongoClient}. + * @param factoryMethodName The name of the public static factory method belonging to the aforementioned factory + * class. + * @return a new MongoDB provider. + * @deprecated in 2.8; use {@link #newBuilder()} instead. + */ + @PluginFactory + public static MongoDbProvider createNoSqlProvider( + final String collectionName, + final String writeConcernConstant, + final String writeConcernConstantClassName, + final String databaseName, + final String server, + final String port, + final String userName, + final String password, + final String factoryClassName, + final String factoryMethodName) { + LOGGER.info("createNoSqlProvider"); + return newBuilder().setCollectionName(collectionName).setWriteConcernConstant(writeConcernConstantClassName) + .setWriteConcernConstant(writeConcernConstant).setDatabaseName(databaseName).setServer(server) + .setPort(port).setUserName(userName).setPassword(password).setFactoryClassName(factoryClassName) + .setFactoryMethodName(factoryMethodName).build(); + } + + @PluginBuilderFactory + public static <B extends Builder<B>> B newBuilder() { + return new Builder<B>().asBuilder(); + } + + public static class Builder<B extends Builder<B>> extends AbstractFilterable.Builder<B> + implements org.apache.logging.log4j.core.util.Builder<MongoDbProvider> { + + @PluginBuilderAttribute + @ValidHost + private String server = "localhost"; + + @PluginBuilderAttribute + @ValidPort + private String port = "" + DEFAULT_PORT; + + @PluginBuilderAttribute + @Required(message = "No database name provided") + private String databaseName; + + @PluginBuilderAttribute + @Required(message = "No collection name provided") + private String collectionName; + + @PluginBuilderAttribute + private String userName; + + @PluginBuilderAttribute(sensitive = true) + private String password; + + @PluginBuilderAttribute("capped") + private boolean isCapped = false; + + @PluginBuilderAttribute + private int collectionSize = DEFAULT_COLLECTION_SIZE; + + @PluginBuilderAttribute + private String factoryClassName; + + @PluginBuilderAttribute + private String factoryMethodName; + + @PluginBuilderAttribute + private String writeConcernConstantClassName; + + @PluginBuilderAttribute + private String writeConcernConstant; + + public B setServer(final String server) { + this.server = server; + return asBuilder(); + } + + public B setPort(final String port) { + this.port = port; + return asBuilder(); + } + + public B setDatabaseName(final String databaseName) { + this.databaseName = databaseName; + return asBuilder(); + } + + public B setCollectionName(final String collectionName) { + this.collectionName = collectionName; + return asBuilder(); + } + + public B setUserName(final String userName) { + this.userName = userName; + return asBuilder(); + } + + public B setPassword(final String password) { + this.password = password; + return asBuilder(); + } + + public B setCapped(final boolean isCapped) { + this.isCapped = isCapped; + return asBuilder(); + } + + public B setCollectionSize(final int collectionSize) { + this.collectionSize = collectionSize; + return asBuilder(); + } + + public B setFactoryClassName(final String factoryClassName) { + this.factoryClassName = factoryClassName; + return asBuilder(); + } + + public B setFactoryMethodName(final String factoryMethodName) { + this.factoryMethodName = factoryMethodName; + return asBuilder(); + } + + public B setWriteConcernConstantClassName(final String writeConcernConstantClassName) { + this.writeConcernConstantClassName = writeConcernConstantClassName; + return asBuilder(); + } + + public B setWriteConcernConstant(final String writeConcernConstant) { + this.writeConcernConstant = writeConcernConstant; + return asBuilder(); + } + + @Override + public MongoDbProvider build() { + DB database; + String description; + if (Strings.isNotEmpty(factoryClassName) && Strings.isNotEmpty(factoryMethodName)) { + try { + final Class<?> factoryClass = LoaderUtil.loadClass(factoryClassName); + final Method method = factoryClass.getMethod(factoryMethodName); + final Object object = method.invoke(null); + + if (object instanceof DB) { + database = (DB) object; + } else if (object instanceof MongoClient) { + if (Strings.isNotEmpty(databaseName)) { + database = ((MongoClient) object).getDB(databaseName); + } else { + LOGGER.error("The factory method [{}.{}()] returned a MongoClient so the database name is " + + "required.", factoryClassName, factoryMethodName); + return null; + } + } else if (object == null) { + LOGGER.error("The factory method [{}.{}()] returned null.", factoryClassName, factoryMethodName); + return null; + } else { + LOGGER.error("The factory method [{}.{}()] returned an unsupported type [{}].", factoryClassName, + factoryMethodName, object.getClass().getName()); + return null; + } + + description = "database=" + database.getName(); + final List<ServerAddress> addresses = database.getMongo().getAllAddress(); + if (addresses.size() == 1) { + description += ", server=" + addresses.get(0).getHost() + ", port=" + addresses.get(0).getPort(); + } else { + description += ", servers=["; + for (final ServerAddress address : addresses) { + description += " { " + address.getHost() + ", " + address.getPort() + " } "; + } + description += "]"; + } + } catch (final ClassNotFoundException e) { + LOGGER.error("The factory class [{}] could not be loaded.", factoryClassName, e); + return null; + } catch (final NoSuchMethodException e) { + LOGGER.error("The factory class [{}] does not have a no-arg method named [{}].", factoryClassName, + factoryMethodName, e); + return null; + } catch (final Exception e) { + LOGGER.error("The factory method [{}.{}()] could not be invoked.", factoryClassName, factoryMethodName, + e); + return null; + } + } else if (Strings.isNotEmpty(databaseName)) { + final List<MongoCredential> credentials = new ArrayList<>(); + description = "database=" + databaseName; + if (Strings.isNotEmpty(userName) && Strings.isNotEmpty(password)) { + description += ", username=" + userName + ", passwordHash=" + + NameUtil.md5(password + MongoDbProvider.class.getName()); + credentials.add(MongoCredential.createCredential(userName, databaseName, password.toCharArray())); + } + try { + final int portInt = TypeConverters.convert(port, int.class, DEFAULT_PORT); + description += ", server=" + server + ", port=" + portInt; + database = new MongoClient(new ServerAddress(server, portInt), credentials).getDB(databaseName); + } catch (final Exception e) { + LOGGER.error( + "Failed to obtain a database instance from the MongoClient at server [{}] and " + "port [{}].", + server, port); + return null; + } + } else { + LOGGER.error("No factory method was provided so the database name is required."); + return null; + } + + try { + database.getCollectionNames(); // Check if the database actually requires authentication + } catch (final Exception e) { + LOGGER.error( + "The database is not up, or you are not authenticated, try supplying a username and password to the MongoDB provider.", + e); + return null; + } + + final WriteConcern writeConcern = toWriteConcern(writeConcernConstant, writeConcernConstantClassName); + + return new MongoDbProvider(database, writeConcern, collectionName, isCapped, collectionSize, description); + } + + private static WriteConcern toWriteConcern(final String writeConcernConstant, + final String writeConcernConstantClassName) { + WriteConcern writeConcern; + if (Strings.isNotEmpty(writeConcernConstant)) { + if (Strings.isNotEmpty(writeConcernConstantClassName)) { + try { + final Class<?> writeConcernConstantClass = LoaderUtil.loadClass(writeConcernConstantClassName); + final Field field = writeConcernConstantClass.getField(writeConcernConstant); + writeConcern = (WriteConcern) field.get(null); + } catch (final Exception e) { + LOGGER.error("Write concern constant [{}.{}] not found, using default.", + writeConcernConstantClassName, writeConcernConstant); + writeConcern = DEFAULT_WRITE_CONCERN; + } + } else { + writeConcern = WriteConcern.valueOf(writeConcernConstant); + if (writeConcern == null) { + LOGGER.warn("Write concern constant [{}] not found, using default.", writeConcernConstant); + writeConcern = DEFAULT_WRITE_CONCERN; + } + } + } else { + writeConcern = DEFAULT_WRITE_CONCERN; + } + return writeConcern; + } + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/package-info.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/package-info.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/package-info.java new file mode 100644 index 0000000..f944511 --- /dev/null +++ b/log4j-mongodb/src/main/java/org/apache/logging/log4j/mongodb/package-info.java @@ -0,0 +1,20 @@ +/* + * 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. + */ +/** + * The classes in this package contain the MongoDB provider for the NoSQL Appender. + */ +package org.apache.logging.log4j.mongodb; http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java deleted file mode 100644 index 66e205d..0000000 --- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbConnection.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * 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.nosql.appender.mongodb; - -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.appender.AppenderLoggingException; -import org.apache.logging.log4j.core.appender.nosql.AbstractNoSqlConnection; -import org.apache.logging.log4j.core.appender.nosql.NoSqlConnection; -import org.apache.logging.log4j.core.appender.nosql.NoSqlObject; -import org.apache.logging.log4j.status.StatusLogger; -import org.bson.BSON; -import org.bson.Transformer; - -import com.mongodb.BasicDBObject; -import com.mongodb.DB; -import com.mongodb.DBCollection; -import com.mongodb.MongoException; -import com.mongodb.WriteConcern; - -/** - * The MongoDB implementation of {@link NoSqlConnection}. - */ -public final class MongoDbConnection extends AbstractNoSqlConnection<BasicDBObject, MongoDbObject> { - - private static final Logger LOGGER = StatusLogger.getLogger(); - - static { - BSON.addEncodingHook(Level.class, new Transformer() { - @Override - public Object transform(final Object o) { - if (o instanceof Level) { - return ((Level) o).name(); - } - return o; - } - }); - } - - private final DBCollection collection; - private final WriteConcern writeConcern; - - public MongoDbConnection(final DB database, final WriteConcern writeConcern, final String collectionName, - final Boolean isCapped, final Integer collectionSize) { - if (database.collectionExists(collectionName)) { - collection = database.getCollection(collectionName); - } else { - final BasicDBObject options = new BasicDBObject(); - options.put("capped", isCapped); - options.put("size", collectionSize); - this.collection = database.createCollection(collectionName, options); - } - this.writeConcern = writeConcern; - } - - @Override - public MongoDbObject createObject() { - return new MongoDbObject(); - } - - @Override - public MongoDbObject[] createList(final int length) { - return new MongoDbObject[length]; - } - - @Override - public void insertObject(final NoSqlObject<BasicDBObject> object) { - try { - this.collection.insert(object.unwrap(), this.writeConcern); - } catch (final MongoException e) { - throw new AppenderLoggingException("Failed to write log event to MongoDB due to error: " + e.getMessage(), - e); - } - } - - @Override - public void closeImpl() { - // LOG4J2-1196 - this.collection.getDB().getMongo().close(); - } - -} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbObject.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbObject.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbObject.java deleted file mode 100644 index 8eb6e46..0000000 --- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbObject.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.nosql.appender.mongodb; - -import java.util.Collections; - -import org.apache.logging.log4j.core.appender.nosql.NoSqlObject; - -import com.mongodb.BasicDBList; -import com.mongodb.BasicDBObject; - -/** - * The MongoDB implementation of {@link NoSqlObject}. - */ -public final class MongoDbObject implements NoSqlObject<BasicDBObject> { - private final BasicDBObject mongoObject; - - public MongoDbObject() { - this.mongoObject = new BasicDBObject(); - } - - @Override - public void set(final String field, final Object value) { - this.mongoObject.append(field, value); - } - - @Override - public void set(final String field, final NoSqlObject<BasicDBObject> value) { - this.mongoObject.append(field, value.unwrap()); - } - - @Override - public void set(final String field, final Object[] values) { - final BasicDBList list = new BasicDBList(); - Collections.addAll(list, values); - this.mongoObject.append(field, list); - } - - @Override - public void set(final String field, final NoSqlObject<BasicDBObject>[] values) { - final BasicDBList list = new BasicDBList(); - for (final NoSqlObject<BasicDBObject> value : values) { - list.add(value.unwrap()); - } - this.mongoObject.append(field, list); - } - - @Override - public BasicDBObject unwrap() { - return this.mongoObject; - } -} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java deleted file mode 100644 index 5167c3e..0000000 --- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbProvider.java +++ /dev/null @@ -1,351 +0,0 @@ -/* - * 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.nosql.appender.mongodb; - -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.core.Core; -import org.apache.logging.log4j.core.config.plugins.Plugin; -import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute; -import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory; -import org.apache.logging.log4j.core.config.plugins.PluginFactory; -import org.apache.logging.log4j.core.config.plugins.convert.TypeConverters; -import org.apache.logging.log4j.core.config.plugins.validation.constraints.Required; -import org.apache.logging.log4j.core.config.plugins.validation.constraints.ValidHost; -import org.apache.logging.log4j.core.config.plugins.validation.constraints.ValidPort; -import org.apache.logging.log4j.core.filter.AbstractFilterable; -import org.apache.logging.log4j.core.util.NameUtil; -import org.apache.logging.log4j.core.appender.nosql.NoSqlProvider; -import org.apache.logging.log4j.status.StatusLogger; -import org.apache.logging.log4j.util.LoaderUtil; -import org.apache.logging.log4j.util.Strings; - -import com.mongodb.DB; -import com.mongodb.MongoClient; -import com.mongodb.MongoCredential; -import com.mongodb.ServerAddress; -import com.mongodb.WriteConcern; - -/** - * The MongoDB implementation of {@link NoSqlProvider}. - */ -@Plugin(name = "MongoDb", category = Core.CATEGORY_NAME, printObject = true) -public final class MongoDbProvider implements NoSqlProvider<MongoDbConnection> { - - private static final WriteConcern DEFAULT_WRITE_CONCERN = WriteConcern.ACKNOWLEDGED; - private static final Logger LOGGER = StatusLogger.getLogger(); - private static final int DEFAULT_PORT = 27017; - private static final int DEFAULT_COLLECTION_SIZE = 536870912; - - private final String collectionName; - private final DB database; - private final String description; - private final WriteConcern writeConcern; - private final boolean isCapped; - private final Integer collectionSize; - - private MongoDbProvider(final DB database, final WriteConcern writeConcern, final String collectionName, - final boolean isCapped, final Integer collectionSize, final String description) { - this.database = database; - this.writeConcern = writeConcern; - this.collectionName = collectionName; - this.isCapped = isCapped; - this.collectionSize = collectionSize; - this.description = "mongoDb{ " + description + " }"; - } - - @Override - public MongoDbConnection getConnection() { - return new MongoDbConnection(this.database, this.writeConcern, this.collectionName, this.isCapped, this.collectionSize); - } - - @Override - public String toString() { - return this.description; - } - - /** - * Factory method for creating a MongoDB provider within the plugin manager. - * - * @param collectionName The name of the MongoDB collection to which log events should be written. - * @param writeConcernConstant The {@link WriteConcern} constant to control writing details, defaults to - * {@link WriteConcern#ACKNOWLEDGED}. - * @param writeConcernConstantClassName The name of a class containing the aforementioned static WriteConcern - * constant. Defaults to {@link WriteConcern}. - * @param databaseName The name of the MongoDB database containing the collection to which log events should be - * written. Mutually exclusive with {@code factoryClassName&factoryMethodName!=null}. - * @param server The host name of the MongoDB server, defaults to localhost and mutually exclusive with - * {@code factoryClassName&factoryMethodName!=null}. - * @param port The port the MongoDB server is listening on, defaults to the default MongoDB port and mutually - * exclusive with {@code factoryClassName&factoryMethodName!=null}. - * @param userName The username to authenticate against the MongoDB server with. - * @param password The password to authenticate against the MongoDB server with. - * @param factoryClassName A fully qualified class name containing a static factory method capable of returning a - * {@link DB} or a {@link MongoClient}. - * @param factoryMethodName The name of the public static factory method belonging to the aforementioned factory - * class. - * @return a new MongoDB provider. - * @deprecated in 2.8; use {@link #newBuilder()} instead. - */ - @PluginFactory - public static MongoDbProvider createNoSqlProvider( - final String collectionName, - final String writeConcernConstant, - final String writeConcernConstantClassName, - final String databaseName, - final String server, - final String port, - final String userName, - final String password, - final String factoryClassName, - final String factoryMethodName) { - LOGGER.info("createNoSqlProvider"); - return newBuilder().setCollectionName(collectionName).setWriteConcernConstant(writeConcernConstantClassName) - .setWriteConcernConstant(writeConcernConstant).setDatabaseName(databaseName).setServer(server) - .setPort(port).setUserName(userName).setPassword(password).setFactoryClassName(factoryClassName) - .setFactoryMethodName(factoryMethodName).build(); - } - - @PluginBuilderFactory - public static <B extends Builder<B>> B newBuilder() { - return new Builder<B>().asBuilder(); - } - - public static class Builder<B extends Builder<B>> extends AbstractFilterable.Builder<B> - implements org.apache.logging.log4j.core.util.Builder<MongoDbProvider> { - - @PluginBuilderAttribute - @ValidHost - private String server = "localhost"; - - @PluginBuilderAttribute - @ValidPort - private String port = "" + DEFAULT_PORT; - - @PluginBuilderAttribute - @Required(message = "No database name provided") - private String databaseName; - - @PluginBuilderAttribute - @Required(message = "No collection name provided") - private String collectionName; - - @PluginBuilderAttribute - private String userName; - - @PluginBuilderAttribute(sensitive = true) - private String password; - - @PluginBuilderAttribute("capped") - private boolean isCapped = false; - - @PluginBuilderAttribute - private int collectionSize = DEFAULT_COLLECTION_SIZE; - - @PluginBuilderAttribute - private String factoryClassName; - - @PluginBuilderAttribute - private String factoryMethodName; - - @PluginBuilderAttribute - private String writeConcernConstantClassName; - - @PluginBuilderAttribute - private String writeConcernConstant; - - public B setServer(final String server) { - this.server = server; - return asBuilder(); - } - - public B setPort(final String port) { - this.port = port; - return asBuilder(); - } - - public B setDatabaseName(final String databaseName) { - this.databaseName = databaseName; - return asBuilder(); - } - - public B setCollectionName(final String collectionName) { - this.collectionName = collectionName; - return asBuilder(); - } - - public B setUserName(final String userName) { - this.userName = userName; - return asBuilder(); - } - - public B setPassword(final String password) { - this.password = password; - return asBuilder(); - } - - public B setCapped(final boolean isCapped) { - this.isCapped = isCapped; - return asBuilder(); - } - - public B setCollectionSize(final int collectionSize) { - this.collectionSize = collectionSize; - return asBuilder(); - } - - public B setFactoryClassName(final String factoryClassName) { - this.factoryClassName = factoryClassName; - return asBuilder(); - } - - public B setFactoryMethodName(final String factoryMethodName) { - this.factoryMethodName = factoryMethodName; - return asBuilder(); - } - - public B setWriteConcernConstantClassName(final String writeConcernConstantClassName) { - this.writeConcernConstantClassName = writeConcernConstantClassName; - return asBuilder(); - } - - public B setWriteConcernConstant(final String writeConcernConstant) { - this.writeConcernConstant = writeConcernConstant; - return asBuilder(); - } - - @Override - public MongoDbProvider build() { - DB database; - String description; - if (Strings.isNotEmpty(factoryClassName) && Strings.isNotEmpty(factoryMethodName)) { - try { - final Class<?> factoryClass = LoaderUtil.loadClass(factoryClassName); - final Method method = factoryClass.getMethod(factoryMethodName); - final Object object = method.invoke(null); - - if (object instanceof DB) { - database = (DB) object; - } else if (object instanceof MongoClient) { - if (Strings.isNotEmpty(databaseName)) { - database = ((MongoClient) object).getDB(databaseName); - } else { - LOGGER.error("The factory method [{}.{}()] returned a MongoClient so the database name is " - + "required.", factoryClassName, factoryMethodName); - return null; - } - } else if (object == null) { - LOGGER.error("The factory method [{}.{}()] returned null.", factoryClassName, factoryMethodName); - return null; - } else { - LOGGER.error("The factory method [{}.{}()] returned an unsupported type [{}].", factoryClassName, - factoryMethodName, object.getClass().getName()); - return null; - } - - description = "database=" + database.getName(); - final List<ServerAddress> addresses = database.getMongo().getAllAddress(); - if (addresses.size() == 1) { - description += ", server=" + addresses.get(0).getHost() + ", port=" + addresses.get(0).getPort(); - } else { - description += ", servers=["; - for (final ServerAddress address : addresses) { - description += " { " + address.getHost() + ", " + address.getPort() + " } "; - } - description += "]"; - } - } catch (final ClassNotFoundException e) { - LOGGER.error("The factory class [{}] could not be loaded.", factoryClassName, e); - return null; - } catch (final NoSuchMethodException e) { - LOGGER.error("The factory class [{}] does not have a no-arg method named [{}].", factoryClassName, - factoryMethodName, e); - return null; - } catch (final Exception e) { - LOGGER.error("The factory method [{}.{}()] could not be invoked.", factoryClassName, factoryMethodName, - e); - return null; - } - } else if (Strings.isNotEmpty(databaseName)) { - final List<MongoCredential> credentials = new ArrayList<>(); - description = "database=" + databaseName; - if (Strings.isNotEmpty(userName) && Strings.isNotEmpty(password)) { - description += ", username=" + userName + ", passwordHash=" - + NameUtil.md5(password + MongoDbProvider.class.getName()); - credentials.add(MongoCredential.createCredential(userName, databaseName, password.toCharArray())); - } - try { - final int portInt = TypeConverters.convert(port, int.class, DEFAULT_PORT); - description += ", server=" + server + ", port=" + portInt; - database = new MongoClient(new ServerAddress(server, portInt), credentials).getDB(databaseName); - } catch (final Exception e) { - LOGGER.error( - "Failed to obtain a database instance from the MongoClient at server [{}] and " + "port [{}].", - server, port); - return null; - } - } else { - LOGGER.error("No factory method was provided so the database name is required."); - return null; - } - - try { - database.getCollectionNames(); // Check if the database actually requires authentication - } catch (final Exception e) { - LOGGER.error( - "The database is not up, or you are not authenticated, try supplying a username and password to the MongoDB provider.", - e); - return null; - } - - final WriteConcern writeConcern = toWriteConcern(writeConcernConstant, writeConcernConstantClassName); - - return new MongoDbProvider(database, writeConcern, collectionName, isCapped, collectionSize, description); - } - - private static WriteConcern toWriteConcern(final String writeConcernConstant, - final String writeConcernConstantClassName) { - WriteConcern writeConcern; - if (Strings.isNotEmpty(writeConcernConstant)) { - if (Strings.isNotEmpty(writeConcernConstantClassName)) { - try { - final Class<?> writeConcernConstantClass = LoaderUtil.loadClass(writeConcernConstantClassName); - final Field field = writeConcernConstantClass.getField(writeConcernConstant); - writeConcern = (WriteConcern) field.get(null); - } catch (final Exception e) { - LOGGER.error("Write concern constant [{}.{}] not found, using default.", - writeConcernConstantClassName, writeConcernConstant); - writeConcern = DEFAULT_WRITE_CONCERN; - } - } else { - writeConcern = WriteConcern.valueOf(writeConcernConstant); - if (writeConcern == null) { - LOGGER.warn("Write concern constant [{}] not found, using default.", writeConcernConstant); - writeConcern = DEFAULT_WRITE_CONCERN; - } - } - } else { - writeConcern = DEFAULT_WRITE_CONCERN; - } - return writeConcern; - } - } -} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/package-info.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/package-info.java b/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/package-info.java deleted file mode 100644 index 54a2878..0000000 --- a/log4j-mongodb/src/main/java/org/apache/logging/log4j/nosql/appender/mongodb/package-info.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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. - */ -/** - * The classes in this package contain the MongoDB provider for the NoSQL Appender. - */ -package org.apache.logging.log4j.nosql.appender.mongodb; http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthTest.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthTest.java new file mode 100644 index 0000000..142a470 --- /dev/null +++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbAuthTest.java @@ -0,0 +1,40 @@ +/* + * 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.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.categories.Appenders; +import org.apache.logging.log4j.junit.LoggerContextRule; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Ignore("Requires a running MongoDB server") +@Category(Appenders.MongoDb.class) +public class MongoDbAuthTest { + + @ClassRule + public static LoggerContextRule context = new LoggerContextRule("log4j2-mongodb-auth.xml"); + + @Test + public void test() { + final Logger logger = LogManager.getLogger(); + logger.info("Hello log"); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedTest.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedTest.java new file mode 100644 index 0000000..d5aa5a9 --- /dev/null +++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbCappedTest.java @@ -0,0 +1,40 @@ +/* + * 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.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.categories.Appenders; +import org.apache.logging.log4j.junit.LoggerContextRule; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Ignore("Requires a running MongoDB server") +@Category(Appenders.MongoDb.class) +public class MongoDbCappedTest { + + @ClassRule + public static LoggerContextRule context = new LoggerContextRule("log4j2-mongodb-capped.xml"); + + @Test + public void test() { + final Logger logger = LogManager.getLogger(); + logger.info("Hello log"); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTest.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTest.java new file mode 100644 index 0000000..eab3c1c --- /dev/null +++ b/log4j-mongodb/src/test/java/org/apache/logging/log4j/mongodb/MongoDbTest.java @@ -0,0 +1,40 @@ +/* + * 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.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.categories.Appenders; +import org.apache.logging.log4j.junit.LoggerContextRule; +import org.junit.ClassRule; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.experimental.categories.Category; + +@Ignore("Requires a running MongoDB server") +@Category(Appenders.MongoDb.class) +public class MongoDbTest { + + @ClassRule + public static LoggerContextRule context = new LoggerContextRule("log4j2-mongodb.xml"); + + @Test + public void test() { + final Logger logger = LogManager.getLogger(); + logger.info("Hello log"); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbAuthTest.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbAuthTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbAuthTest.java deleted file mode 100644 index 3641a75..0000000 --- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbAuthTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.nosql.appender.mongodb; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.categories.Appenders; -import org.apache.logging.log4j.junit.LoggerContextRule; -import org.junit.ClassRule; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.experimental.categories.Category; - -@Ignore("Requires a running MongoDB server") -@Category(Appenders.MongoDb.class) -public class MongoDbAuthTest { - - @ClassRule - public static LoggerContextRule context = new LoggerContextRule("log4j2-mongodb-auth.xml"); - - @Test - public void test() { - final Logger logger = LogManager.getLogger(); - logger.info("Hello log"); - } -} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbCappedTest.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbCappedTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbCappedTest.java deleted file mode 100644 index a001b4b..0000000 --- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbCappedTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.nosql.appender.mongodb; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.categories.Appenders; -import org.apache.logging.log4j.junit.LoggerContextRule; -import org.junit.ClassRule; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.experimental.categories.Category; - -@Ignore("Requires a running MongoDB server") -@Category(Appenders.MongoDb.class) -public class MongoDbCappedTest { - - @ClassRule - public static LoggerContextRule context = new LoggerContextRule("log4j2-mongodb-capped.xml"); - - @Test - public void test() { - final Logger logger = LogManager.getLogger(); - logger.info("Hello log"); - } -} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbTest.java ---------------------------------------------------------------------- diff --git a/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbTest.java b/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbTest.java deleted file mode 100644 index 59ef951..0000000 --- a/log4j-mongodb/src/test/java/org/apache/logging/log4j/nosql/appender/mongodb/MongoDbTest.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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.nosql.appender.mongodb; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.categories.Appenders; -import org.apache.logging.log4j.junit.LoggerContextRule; -import org.junit.ClassRule; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.experimental.categories.Category; - -@Ignore("Requires a running MongoDB server") -@Category(Appenders.MongoDb.class) -public class MongoDbTest { - - @ClassRule - public static LoggerContextRule context = new LoggerContextRule("log4j2-mongodb.xml"); - - @Test - public void test() { - final Logger logger = LogManager.getLogger(); - logger.info("Hello log"); - } -} http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/44db87d0/src/site/xdoc/manual/appenders.xml ---------------------------------------------------------------------- diff --git a/src/site/xdoc/manual/appenders.xml b/src/site/xdoc/manual/appenders.xml index ae86b54..bdfeddd 100644 --- a/src/site/xdoc/manual/appenders.xml +++ b/src/site/xdoc/manual/appenders.xml @@ -380,7 +380,7 @@ </Cassandra> </Appenders> <Loggers> - <Logger name="org.apache.logging.log4j.nosql.appender.cassandra" level="DEBUG"> + <Logger name="org.apache.logging.log4j.cassandra" level="DEBUG"> <AppenderRef ref="Cassandra"/> </Logger> <Root level="ERROR"/>