Skip to content

Commit 9737464

Browse files
Ricardo Espirito Santomp911de
Ricardo Espirito Santo
authored andcommitted
DATAMONGO-442 - Support username/password authentication with MongoLog4jAppender.
Added optional username and password for authentication support on Log4jAppender. Original pull request: #419.
1 parent 204a051 commit 9737464

File tree

2 files changed

+69
-47
lines changed

2 files changed

+69
-47
lines changed

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

+41-21
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,23 @@
1515
*/
1616
package org.springframework.data.mongodb.log4j;
1717

18-
import java.net.UnknownHostException;
19-
import java.util.Arrays;
20-
import java.util.Calendar;
21-
import java.util.Map;
22-
18+
import com.mongodb.*;
2319
import org.apache.log4j.AppenderSkeleton;
2420
import org.apache.log4j.Level;
2521
import org.apache.log4j.MDC;
2622
import org.apache.log4j.PatternLayout;
2723
import org.apache.log4j.spi.LoggingEvent;
2824

29-
import com.mongodb.BasicDBList;
30-
import com.mongodb.BasicDBObject;
31-
import com.mongodb.DB;
32-
import com.mongodb.Mongo;
33-
import com.mongodb.MongoClient;
34-
import com.mongodb.WriteConcern;
25+
import java.net.UnknownHostException;
26+
import java.util.*;
3527

3628
/**
3729
* Log4j appender writing log entries into a MongoDB instance.
38-
*
30+
*
3931
* @author Jon Brisbin
4032
* @author Oliver Gierke
41-
* @auhtor Christoph Strobl
33+
* @author Christoph Strobl
34+
* @author Ricardo Espirito Santo
4235
*/
4336
public class MongoLog4jAppender extends AppenderSkeleton {
4437

@@ -56,6 +49,8 @@ public class MongoLog4jAppender extends AppenderSkeleton {
5649

5750
protected String host = "localhost";
5851
protected int port = 27017;
52+
protected String username;
53+
protected String password;
5954
protected String database = "logs";
6055
protected String collectionPattern = "%c";
6156
protected PatternLayout collectionLayout = new PatternLayout(collectionPattern);
@@ -88,6 +83,22 @@ public void setPort(int port) {
8883
this.port = port;
8984
}
9085

86+
public String getPassword() {
87+
return password;
88+
}
89+
90+
public void setPassword(String password) {
91+
this.password = password;
92+
}
93+
94+
public String getUsername() {
95+
return username;
96+
}
97+
98+
public void setUsername(String username) {
99+
this.username = username;
100+
}
101+
91102
public String getDatabase() {
92103
return database;
93104
}
@@ -113,14 +124,14 @@ public void setApplicationId(String applicationId) {
113124
this.applicationId = applicationId;
114125
}
115126

116-
public void setWarnOrHigherWriteConcern(String wc) {
117-
this.warnOrHigherWriteConcern = WriteConcern.valueOf(wc);
118-
}
119-
120127
public String getWarnOrHigherWriteConcern() {
121128
return warnOrHigherWriteConcern.toString();
122129
}
123130

131+
public void setWarnOrHigherWriteConcern(String wc) {
132+
this.warnOrHigherWriteConcern = WriteConcern.valueOf(wc);
133+
}
134+
124135
public String getInfoOrLowerWriteConcern() {
125136
return infoOrLowerWriteConcern.toString();
126137
}
@@ -130,17 +141,26 @@ public void setInfoOrLowerWriteConcern(String wc) {
130141
}
131142

132143
protected void connectToMongo() throws UnknownHostException {
133-
this.mongo = new MongoClient(host, port);
144+
ServerAddress serverAddress = new ServerAddress(host, port);
145+
connectToMongoHandlingCredentials(serverAddress);
134146
this.db = mongo.getDB(database);
135147
}
136148

149+
private void connectToMongoHandlingCredentials(ServerAddress serverAddress) {
150+
if (null == password || null == username) {
151+
this.mongo = new MongoClient(serverAddress);
152+
} else {
153+
MongoCredential mongoCredential = MongoCredential.createCredential(username, database, password.toCharArray());
154+
List<MongoCredential> credentials = Collections.singletonList(mongoCredential);
155+
this.mongo = new MongoClient(serverAddress, credentials);
156+
}
157+
}
158+
137159
/*
138160
* (non-Javadoc)
139161
* @see org.apache.log4j.AppenderSkeleton#append(org.apache.log4j.spi.LoggingEvent)
140162
*/
141-
@Override
142-
@SuppressWarnings({ "unchecked" })
143-
protected void append(final LoggingEvent event) {
163+
@Override @SuppressWarnings({ "unchecked" }) protected void append(final LoggingEvent event) {
144164
if (null == db) {
145165
try {
146166
connectToMongo();

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

+28-26
Original file line numberDiff line numberDiff line change
@@ -15,56 +15,50 @@
1515
*/
1616
package org.springframework.data.mongodb.log4j;
1717

18-
import static org.hamcrest.Matchers.*;
19-
import static org.junit.Assert.*;
20-
21-
import java.util.Calendar;
22-
18+
import com.mongodb.*;
2319
import org.apache.log4j.Logger;
2420
import org.apache.log4j.MDC;
2521
import org.junit.After;
2622
import org.junit.Before;
2723
import org.junit.Test;
2824

29-
import com.mongodb.BasicDBObject;
30-
import com.mongodb.DB;
31-
import com.mongodb.DBCursor;
32-
import com.mongodb.MongoClient;
25+
import java.net.UnknownHostException;
26+
import java.util.Calendar;
27+
import java.util.Collections;
28+
29+
import static org.hamcrest.Matchers.is;
30+
import static org.junit.Assert.assertThat;
3331

3432
/**
3533
* Integration tests for {@link MongoLog4jAppender}.
36-
*
34+
*
3735
* @author Jon Brisbin
3836
* @author Oliver Gierke
3937
* @author Christoph Strobl
4038
*/
4139
public class MongoLog4jAppenderIntegrationTests {
4240

43-
static final String NAME = MongoLog4jAppenderIntegrationTests.class.getName();
44-
45-
private static final Logger log = Logger.getLogger(NAME);
46-
MongoClient mongo;
47-
DB db;
48-
String collection;
41+
private static final Logger log = Logger.getLogger(MongoLog4jAppenderIntegrationTests.class.getName());
42+
private MongoClient mongo;
43+
private DB db;
44+
private String collection;
45+
private ServerAddress serverLocation;
4946

50-
@Before
51-
public void setUp() throws Exception {
47+
@Before public void setUp() throws Exception {
48+
serverLocation = new ServerAddress("localhost", 27017);
5249

53-
mongo = new MongoClient("localhost", 27017);
50+
mongo = new MongoClient(serverLocation);
5451
db = mongo.getDB("logs");
5552

5653
Calendar now = Calendar.getInstance();
5754
collection = String.valueOf(now.get(Calendar.YEAR)) + String.format("%1$02d", now.get(Calendar.MONTH) + 1);
5855
}
5956

60-
@After
61-
public void tearDown() {
57+
@After public void tearDown() {
6258
db.getCollection(collection).remove(new BasicDBObject());
6359
}
6460

65-
@Test
66-
public void testLogging() {
67-
61+
@Test public void testLogging() {
6862
log.debug("DEBUG message");
6963
log.info("INFO message");
7064
log.warn("WARN message");
@@ -74,10 +68,18 @@ public void testLogging() {
7468
assertThat(msgs.count(), is(4));
7569
}
7670

77-
@Test
78-
public void testProperties() {
71+
/**
72+
* @see DATAMONGO-442
73+
*/
74+
@Test public void testLoggingWithCredentials() throws UnknownHostException {
75+
MongoCredential credential = MongoCredential.createCredential("username", "logs", "password".toCharArray());
76+
mongo = new MongoClient(serverLocation, Collections.singletonList(credential));
77+
testLogging();
78+
}
7979

80+
@Test public void testProperties() {
8081
MDC.put("property", "one");
8182
log.debug("DEBUG message");
8283
}
84+
8385
}

0 commit comments

Comments
 (0)