1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.logging.log4j.core.appender.db.nosql.mongo;
18
19 import org.apache.logging.log4j.Logger;
20 import org.apache.logging.log4j.core.appender.db.nosql.NoSQLConnection;
21 import org.apache.logging.log4j.core.appender.db.nosql.NoSQLObject;
22 import org.apache.logging.log4j.status.StatusLogger;
23
24 import com.mongodb.BasicDBObject;
25 import com.mongodb.DB;
26 import com.mongodb.DBCollection;
27 import com.mongodb.Mongo;
28 import com.mongodb.MongoException;
29 import com.mongodb.WriteConcern;
30 import com.mongodb.WriteResult;
31
32
33
34
35 public final class MongoDBConnection implements NoSQLConnection<BasicDBObject, MongoDBObject> {
36 private static final Logger LOGGER = StatusLogger.getLogger();
37
38 private final DBCollection collection;
39 private final Mongo mongo;
40 private final WriteConcern writeConcern;
41
42 public MongoDBConnection(final DB database, final WriteConcern writeConcern, final String collectionName) {
43 this.mongo = database.getMongo();
44 this.collection = database.getCollection(collectionName);
45 this.writeConcern = writeConcern;
46 }
47
48 @Override
49 public MongoDBObject createObject() {
50 return new MongoDBObject();
51 }
52
53 @Override
54 public MongoDBObject[] createList(final int length) {
55 return new MongoDBObject[length];
56 }
57
58 @Override
59 public void insertObject(final NoSQLObject<BasicDBObject> object) {
60 try {
61 final WriteResult result = this.collection.insert(object.unwrap(), this.writeConcern);
62 if (result.getN() < 1) {
63 LOGGER.error("Failed to write log event to MongoDB due to invalid result [{}].", result.getN());
64 }
65 } catch (final MongoException e) {
66 LOGGER.error("Failed to write log event to MongoDB due to error.", e);
67 }
68 }
69
70 @Override
71 public void close() {
72 this.mongo.close();
73 }
74
75 @Override
76 public boolean isClosed() {
77 return !this.mongo.getConnector().isOpen();
78 }
79 }