From 5827487eb72c3c8868e3f9e0f269ed4d4eca9156 Mon Sep 17 00:00:00 2001 From: Ricardo Espirito Santo Date: Thu, 1 Dec 2016 16:53:02 +0000 Subject: [PATCH 1/2] Added optional username and password for authentication support on Log4jAppender --- .../mongodb/log4j/MongoLog4jAppender.java | 61 ++++++++++++------- .../MongoLog4jAppenderIntegrationTests.java | 51 ++++++++-------- 2 files changed, 65 insertions(+), 47 deletions(-) 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 165061e6bd..0e3fc148b3 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,22 @@ */ 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 */ public class MongoLog4jAppender extends AppenderSkeleton { @@ -56,6 +48,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 +82,22 @@ public void setPort(int port) { 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 +123,14 @@ public void setApplicationId(String applicationId) { 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 +140,26 @@ public void setInfoOrLowerWriteConcern(String wc) { } 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 6862b054dd..64a755ee32 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(NAME); - MongoClient mongo; - DB db; - String collection; + private static final Logger log = Logger.getLogger(MongoLog4jAppenderIntegrationTests.class.getName()); + private MongoClient mongo; + private DB db; + private String collection; + private ServerAddress serverLocation; - @Before - public void setUp() throws Exception { + @Before public void setUp() throws Exception { + serverLocation = new ServerAddress("localhost", 27017); - 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,15 @@ public void testLogging() { assertThat(msgs.count(), is(4)); } - @Test - public void testProperties() { + @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"); } + } From f1618a1fd372e740a87b31d73e89c88eb3d801cf Mon Sep 17 00:00:00 2001 From: Ricardo Espirito Santo Date: Thu, 1 Dec 2016 16:59:56 +0000 Subject: [PATCH 2/2] Added optional username and password for authentication support on Log4jAppender --- .../springframework/data/mongodb/log4j/MongoLog4jAppender.java | 1 + .../data/mongodb/log4j/MongoLog4jAppenderIntegrationTests.java | 3 +++ 2 files changed, 4 insertions(+) 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 0e3fc148b3..9b25550194 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 @@ -31,6 +31,7 @@ * @author Jon Brisbin * @author Oliver Gierke * @author Christoph Strobl + * @author Ricardo Espirito Santo */ public class MongoLog4jAppender extends AppenderSkeleton { 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 64a755ee32..caf395c662 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 @@ -68,6 +68,9 @@ public class MongoLog4jAppenderIntegrationTests { assertThat(msgs.count(), is(4)); } + /** + * @see DATAMONGO-442 + */ @Test public void testLoggingWithCredentials() throws UnknownHostException { MongoCredential credential = MongoCredential.createCredential("username", "logs", "password".toCharArray()); mongo = new MongoClient(serverLocation, Collections.singletonList(credential));