Skip to content

DATAMONGO-442 - Credential support for MongoLog4jAppender #419

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand All @@ -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);
Expand Down Expand Up @@ -88,6 +83,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;
}
Expand All @@ -113,14 +124,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();
}
Expand All @@ -130,17 +141,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<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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -74,10 +68,18 @@ public void testLogging() {
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");
}

}