diff --git a/spring-data-mongodb-log4j/src/main/java/org/springframework/data/mongodb/log4j/MongoLog4jAppender.java b/spring-data-mongodb-log4j/src/main/java/org/springframework/data/mongodb/log4j/MongoLog4jAppender.java index 165061e6b..9b2555019 100644 --- a/spring-data-mongodb-log4j/src/main/java/org/springframework/data/mongodb/log4j/MongoLog4jAppender.java +++ b/spring-data-mongodb-log4j/src/main/java/org/springframework/data/mongodb/log4j/MongoLog4jAppender.java @@ -15,30 +15,23 @@ */ package org.springframework.data.mongodb.log4j; -import java.net.UnknownHostException; -import java.util.Arrays; -import java.util.Calendar; -import java.util.Map; - +import com.mongodb.*; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.MDC; import org.apache.log4j.PatternLayout; import org.apache.log4j.spi.LoggingEvent; -import com.mongodb.BasicDBList; -import com.mongodb.BasicDBObject; -import com.mongodb.DB; -import com.mongodb.Mongo; -import com.mongodb.MongoClient; -import com.mongodb.WriteConcern; +import java.net.UnknownHostException; +import java.util.*; /** * Log4j appender writing log entries into a MongoDB instance. - * + * * @author Jon Brisbin * @author Oliver Gierke - * @auhtor Christoph Strobl + * @author Christoph Strobl + * @author Ricardo Espirito Santo */ public class MongoLog4jAppender extends AppenderSkeleton { @@ -56,6 +49,8 @@ public class MongoLog4jAppender extends AppenderSkeleton { protected String host = "localhost"; protected int port = 27017; + protected String username; + protected String password; protected String database = "logs"; protected String collectionPattern = "%c"; protected PatternLayout collectionLayout = new PatternLayout(collectionPattern); @@ -88,6 +83,22 @@ public class MongoLog4jAppender extends AppenderSkeleton { this.port = port; } + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + public String getDatabase() { return database; } @@ -113,14 +124,14 @@ public class MongoLog4jAppender extends AppenderSkeleton { this.applicationId = applicationId; } - public void setWarnOrHigherWriteConcern(String wc) { - this.warnOrHigherWriteConcern = WriteConcern.valueOf(wc); - } - public String getWarnOrHigherWriteConcern() { return warnOrHigherWriteConcern.toString(); } + public void setWarnOrHigherWriteConcern(String wc) { + this.warnOrHigherWriteConcern = WriteConcern.valueOf(wc); + } + public String getInfoOrLowerWriteConcern() { return infoOrLowerWriteConcern.toString(); } @@ -130,17 +141,26 @@ public class MongoLog4jAppender extends AppenderSkeleton { } protected void connectToMongo() throws UnknownHostException { - this.mongo = new MongoClient(host, port); + ServerAddress serverAddress = new ServerAddress(host, port); + connectToMongoHandlingCredentials(serverAddress); this.db = mongo.getDB(database); } + private void connectToMongoHandlingCredentials(ServerAddress serverAddress) { + if (null == password || null == username) { + this.mongo = new MongoClient(serverAddress); + } else { + MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray()); + List credentials = Collections.singletonList(mongoCredential); + this.mongo = new MongoClient(serverAddress, credentials); + } + } + /* * (non-Javadoc) * @see org.apache.log4j.AppenderSkeleton#append(org.apache.log4j.spi.LoggingEvent) */ - @Override - @SuppressWarnings({ "unchecked" }) - protected void append(final LoggingEvent event) { + @Override @SuppressWarnings({ "unchecked" }) protected void append(final LoggingEvent event) { if (null == db) { try { connectToMongo(); diff --git a/spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/MongoLog4jAppenderIntegrationTests.java b/spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/MongoLog4jAppenderIntegrationTests.java index 6862b054d..caf395c66 100644 --- a/spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/MongoLog4jAppenderIntegrationTests.java +++ b/spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/MongoLog4jAppenderIntegrationTests.java @@ -15,56 +15,50 @@ */ package org.springframework.data.mongodb.log4j; -import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; - -import java.util.Calendar; - +import com.mongodb.*; import org.apache.log4j.Logger; import org.apache.log4j.MDC; import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.mongodb.BasicDBObject; -import com.mongodb.DB; -import com.mongodb.DBCursor; -import com.mongodb.MongoClient; +import java.net.UnknownHostException; +import java.util.Calendar; +import java.util.Collections; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; /** * Integration tests for {@link MongoLog4jAppender}. - * + * * @author Jon Brisbin * @author Oliver Gierke * @author Christoph Strobl */ public class MongoLog4jAppenderIntegrationTests { - static final String NAME = MongoLog4jAppenderIntegrationTests.class.getName(); + private static final Logger log = Logger.getLogger(MongoLog4jAppenderIntegrationTests.class.getName()); + private MongoClient mongo; + private DB db; + private String collection; + private ServerAddress serverLocation; - private static final Logger log = Logger.getLogger(NAME); - MongoClient mongo; - DB db; - String collection; + @Before public void setUp() throws Exception { + serverLocation = new ServerAddress("localhost", 27017); - @Before - public void setUp() throws Exception { - - mongo = new MongoClient("localhost", 27017); + mongo = new MongoClient(serverLocation); db = mongo.getDB("logs"); Calendar now = Calendar.getInstance(); collection = String.valueOf(now.get(Calendar.YEAR)) + String.format("%1$02d", now.get(Calendar.MONTH) + 1); } - @After - public void tearDown() { + @After public void tearDown() { db.getCollection(collection).remove(new BasicDBObject()); } - @Test - public void testLogging() { - + @Test public void testLogging() { log.debug("DEBUG message"); log.info("INFO message"); log.warn("WARN message"); @@ -74,10 +68,18 @@ public class MongoLog4jAppenderIntegrationTests { assertThat(msgs.count(), is(4)); } - @Test - public void testProperties() { + /** + * @see DATAMONGO-442 + */ + @Test public void testLoggingWithCredentials() throws UnknownHostException { + MongoCredential credential = MongoCredential.createCredential("username", "logs", "password".toCharArray()); + mongo = new MongoClient(serverLocation, Collections.singletonList(credential)); + testLogging(); + } + @Test public void testProperties() { MDC.put("property", "one"); log.debug("DEBUG message"); } + }