Browse Source

DATAMONGO-442 - Support username/password authentication with MongoLog4jAppender.

Added optional username and password for authentication support on Log4jAppender.

Original pull request: #419.
pull/428/head
Ricardo Espirito Santo 9 years ago committed by Mark Paluch
parent
commit
9737464f9a
  1. 60
      spring-data-mongodb-log4j/src/main/java/org/springframework/data/mongodb/log4j/MongoLog4jAppender.java
  2. 52
      spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/MongoLog4jAppenderIntegrationTests.java

60
spring-data-mongodb-log4j/src/main/java/org/springframework/data/mongodb/log4j/MongoLog4jAppender.java

@ -15,30 +15,23 @@
*/ */
package org.springframework.data.mongodb.log4j; package org.springframework.data.mongodb.log4j;
import java.net.UnknownHostException; import com.mongodb.*;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level; import org.apache.log4j.Level;
import org.apache.log4j.MDC; import org.apache.log4j.MDC;
import org.apache.log4j.PatternLayout; import org.apache.log4j.PatternLayout;
import org.apache.log4j.spi.LoggingEvent; import org.apache.log4j.spi.LoggingEvent;
import com.mongodb.BasicDBList; import java.net.UnknownHostException;
import com.mongodb.BasicDBObject; import java.util.*;
import com.mongodb.DB;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.WriteConcern;
/** /**
* Log4j appender writing log entries into a MongoDB instance. * Log4j appender writing log entries into a MongoDB instance.
* *
* @author Jon Brisbin * @author Jon Brisbin
* @author Oliver Gierke * @author Oliver Gierke
* @auhtor Christoph Strobl * @author Christoph Strobl
* @author Ricardo Espirito Santo
*/ */
public class MongoLog4jAppender extends AppenderSkeleton { public class MongoLog4jAppender extends AppenderSkeleton {
@ -56,6 +49,8 @@ public class MongoLog4jAppender extends AppenderSkeleton {
protected String host = "localhost"; protected String host = "localhost";
protected int port = 27017; protected int port = 27017;
protected String username;
protected String password;
protected String database = "logs"; protected String database = "logs";
protected String collectionPattern = "%c"; protected String collectionPattern = "%c";
protected PatternLayout collectionLayout = new PatternLayout(collectionPattern); protected PatternLayout collectionLayout = new PatternLayout(collectionPattern);
@ -88,6 +83,22 @@ public class MongoLog4jAppender extends AppenderSkeleton {
this.port = 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() { public String getDatabase() {
return database; return database;
} }
@ -113,14 +124,14 @@ public class MongoLog4jAppender extends AppenderSkeleton {
this.applicationId = applicationId; this.applicationId = applicationId;
} }
public void setWarnOrHigherWriteConcern(String wc) {
this.warnOrHigherWriteConcern = WriteConcern.valueOf(wc);
}
public String getWarnOrHigherWriteConcern() { public String getWarnOrHigherWriteConcern() {
return warnOrHigherWriteConcern.toString(); return warnOrHigherWriteConcern.toString();
} }
public void setWarnOrHigherWriteConcern(String wc) {
this.warnOrHigherWriteConcern = WriteConcern.valueOf(wc);
}
public String getInfoOrLowerWriteConcern() { public String getInfoOrLowerWriteConcern() {
return infoOrLowerWriteConcern.toString(); return infoOrLowerWriteConcern.toString();
} }
@ -130,17 +141,26 @@ public class MongoLog4jAppender extends AppenderSkeleton {
} }
protected void connectToMongo() throws UnknownHostException { protected void connectToMongo() throws UnknownHostException {
this.mongo = new MongoClient(host, port); ServerAddress serverAddress = new ServerAddress(host, port);
connectToMongoHandlingCredentials(serverAddress);
this.db = mongo.getDB(database); 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<MongoCredential> credentials = Collections.singletonList(mongoCredential);
this.mongo = new MongoClient(serverAddress, credentials);
}
}
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see org.apache.log4j.AppenderSkeleton#append(org.apache.log4j.spi.LoggingEvent) * @see org.apache.log4j.AppenderSkeleton#append(org.apache.log4j.spi.LoggingEvent)
*/ */
@Override @Override @SuppressWarnings({ "unchecked" }) protected void append(final LoggingEvent event) {
@SuppressWarnings({ "unchecked" })
protected void append(final LoggingEvent event) {
if (null == db) { if (null == db) {
try { try {
connectToMongo(); connectToMongo();

52
spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/MongoLog4jAppenderIntegrationTests.java

@ -15,21 +15,19 @@
*/ */
package org.springframework.data.mongodb.log4j; package org.springframework.data.mongodb.log4j;
import static org.hamcrest.Matchers.*; import com.mongodb.*;
import static org.junit.Assert.*;
import java.util.Calendar;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.apache.log4j.MDC; import org.apache.log4j.MDC;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import com.mongodb.BasicDBObject; import java.net.UnknownHostException;
import com.mongodb.DB; import java.util.Calendar;
import com.mongodb.DBCursor; import java.util.Collections;
import com.mongodb.MongoClient;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
/** /**
* Integration tests for {@link MongoLog4jAppender}. * Integration tests for {@link MongoLog4jAppender}.
@ -40,31 +38,27 @@ import com.mongodb.MongoClient;
*/ */
public class MongoLog4jAppenderIntegrationTests { public class MongoLog4jAppenderIntegrationTests {
static final String NAME = MongoLog4jAppenderIntegrationTests.class.getName(); private static final Logger log = Logger.getLogger(MongoLog4jAppenderIntegrationTests.class.getName());
private MongoClient mongo;
private static final Logger log = Logger.getLogger(NAME); private DB db;
MongoClient mongo; private String collection;
DB db; private ServerAddress serverLocation;
String collection;
@Before @Before public void setUp() throws Exception {
public void setUp() throws Exception { serverLocation = new ServerAddress("localhost", 27017);
mongo = new MongoClient("localhost", 27017); mongo = new MongoClient(serverLocation);
db = mongo.getDB("logs"); db = mongo.getDB("logs");
Calendar now = Calendar.getInstance(); Calendar now = Calendar.getInstance();
collection = String.valueOf(now.get(Calendar.YEAR)) + String.format("%1$02d", now.get(Calendar.MONTH) + 1); collection = String.valueOf(now.get(Calendar.YEAR)) + String.format("%1$02d", now.get(Calendar.MONTH) + 1);
} }
@After @After public void tearDown() {
public void tearDown() {
db.getCollection(collection).remove(new BasicDBObject()); db.getCollection(collection).remove(new BasicDBObject());
} }
@Test @Test public void testLogging() {
public void testLogging() {
log.debug("DEBUG message"); log.debug("DEBUG message");
log.info("INFO message"); log.info("INFO message");
log.warn("WARN message"); log.warn("WARN message");
@ -74,10 +68,18 @@ public class MongoLog4jAppenderIntegrationTests {
assertThat(msgs.count(), is(4)); 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"); MDC.put("property", "one");
log.debug("DEBUG message"); log.debug("DEBUG message");
} }
} }

Loading…
Cancel
Save