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

Added optional username and password for authentication support on Log4jAppender.

Original pull request: #419.
This commit is contained in:
Ricardo Espirito Santo
2016-12-01 16:53:02 +00:00
committed by Mark Paluch
parent 204a0515c4
commit 9737464f9a
2 changed files with 69 additions and 47 deletions

View File

@@ -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<MongoCredential> 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();

View File

@@ -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");
}
}