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 905dc5ea6..ce1a32c23 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 @@ -21,188 +21,189 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Map; -import com.mongodb.BasicDBList; -import com.mongodb.BasicDBObject; -import com.mongodb.DB; -import com.mongodb.Mongo; -import com.mongodb.WriteConcern; 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.WriteConcern; + /** * @author Jon Brisbin */ public class MongoLog4jAppender extends AppenderSkeleton { - public static final String LEVEL = "level"; - public static final String NAME = "name"; - public static final String APP_ID = "applicationId"; - public static final String TIMESTAMP = "timestamp"; - public static final String PROPERTIES = "properties"; - public static final String TRACEBACK = "traceback"; - public static final String MESSAGE = "message"; - public static final String YEAR = "year"; - public static final String MONTH = "month"; - public static final String DAY = "day"; - public static final String HOUR = "hour"; - - protected String host = "localhost"; - protected int port = 27017; - protected String database = "logs"; - protected String collectionPattern = "%c"; - protected PatternLayout collectionLayout = new PatternLayout(collectionPattern); - protected String applicationId = System.getProperty("APPLICATION_ID", null); - protected WriteConcern warnOrHigherWriteConcern = WriteConcern.SAFE; - protected WriteConcern infoOrLowerWriteConcern = WriteConcern.NORMAL; - protected Mongo mongo; - protected DB db; - - public MongoLog4jAppender() { - } - - public MongoLog4jAppender(boolean isActive) { - super(isActive); - } - - public String getHost() { - return host; - } - - public void setHost(String host) { - this.host = host; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public String getDatabase() { - return database; - } - - public void setDatabase(String database) { - this.database = database; - } - - public String getCollectionPattern() { - return collectionPattern; - } - - public void setCollectionPattern(String collectionPattern) { - this.collectionPattern = collectionPattern; - this.collectionLayout = new PatternLayout(collectionPattern); - } - - public String getApplicationId() { - return applicationId; - } - - 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 String getInfoOrLowerWriteConcern() { - return infoOrLowerWriteConcern.toString(); - } - - public void setInfoOrLowerWriteConcern(String wc) { - this.infoOrLowerWriteConcern = WriteConcern.valueOf(wc); - } - - protected void connectToMongo() throws UnknownHostException { - this.mongo = new Mongo(host, port); - this.db = mongo.getDB(database); - } - - @SuppressWarnings({"unchecked"}) - @Override - protected void append(final LoggingEvent event) { - if (null == db) { - try { - connectToMongo(); - } catch (UnknownHostException e) { - throw new RuntimeException(e.getMessage(), e); - } - } - - BasicDBObject dbo = new BasicDBObject(); - if (null != applicationId) { - dbo.put(APP_ID, applicationId); - MDC.put(APP_ID, applicationId); - } - dbo.put(NAME, event.getLogger().getName()); - dbo.put(LEVEL, event.getLevel().toString()); - Calendar tstamp = Calendar.getInstance(); - tstamp.setTimeInMillis(event.getTimeStamp()); - dbo.put(TIMESTAMP, tstamp.getTime()); - - // Copy properties into document - Map props = event.getProperties(); - if (null != props && props.size() > 0) { - BasicDBObject propsDbo = new BasicDBObject(); - for (Map.Entry entry : props.entrySet()) { - propsDbo.put(entry.getKey().toString(), entry.getValue().toString()); - } - dbo.put(PROPERTIES, propsDbo); - } - - // Copy traceback info (if there is any) into the document - String[] traceback = event.getThrowableStrRep(); - if (null != traceback && traceback.length > 0) { - BasicDBList tbDbo = new BasicDBList(); - tbDbo.addAll(Arrays.asList(traceback)); - dbo.put(TRACEBACK, tbDbo); - } - - // Put the rendered message into the document - dbo.put(MESSAGE, event.getRenderedMessage()); - - // Insert the document - Calendar now = Calendar.getInstance(); - MDC.put(YEAR, now.get(Calendar.YEAR)); - MDC.put(MONTH, String.format("%1$02d", now.get(Calendar.MONTH) + 1)); - MDC.put(DAY, String.format("%1$02d", now.get(Calendar.DAY_OF_MONTH))); - MDC.put(HOUR, String.format("%1$02d", now.get(Calendar.HOUR_OF_DAY))); - - String coll = collectionLayout.format(event); - - MDC.remove(YEAR); - MDC.remove(MONTH); - MDC.remove(DAY); - MDC.remove(HOUR); - if (null != applicationId) { - MDC.remove(APP_ID); - } - - WriteConcern wc; - if (event.getLevel().isGreaterOrEqual(Level.WARN)) { - wc = warnOrHigherWriteConcern; - } else { - wc = infoOrLowerWriteConcern; - } - db.getCollection(coll).insert(dbo, wc); - } - - public void close() { - mongo.close(); - } - - public boolean requiresLayout() { - return true; - } + public static final String LEVEL = "level"; + public static final String NAME = "name"; + public static final String APP_ID = "applicationId"; + public static final String TIMESTAMP = "timestamp"; + public static final String PROPERTIES = "properties"; + public static final String TRACEBACK = "traceback"; + public static final String MESSAGE = "message"; + public static final String YEAR = "year"; + public static final String MONTH = "month"; + public static final String DAY = "day"; + public static final String HOUR = "hour"; + + protected String host = "localhost"; + protected int port = 27017; + protected String database = "logs"; + protected String collectionPattern = "%c"; + protected PatternLayout collectionLayout = new PatternLayout(collectionPattern); + protected String applicationId = System.getProperty("APPLICATION_ID", null); + protected WriteConcern warnOrHigherWriteConcern = WriteConcern.SAFE; + protected WriteConcern infoOrLowerWriteConcern = WriteConcern.NORMAL; + protected Mongo mongo; + protected DB db; + + public MongoLog4jAppender() { + } + + public MongoLog4jAppender(boolean isActive) { + super(isActive); + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public String getDatabase() { + return database; + } + + public void setDatabase(String database) { + this.database = database; + } + + public String getCollectionPattern() { + return collectionPattern; + } + + public void setCollectionPattern(String collectionPattern) { + this.collectionPattern = collectionPattern; + this.collectionLayout = new PatternLayout(collectionPattern); + } + + public String getApplicationId() { + return applicationId; + } + + 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 String getInfoOrLowerWriteConcern() { + return infoOrLowerWriteConcern.toString(); + } + + public void setInfoOrLowerWriteConcern(String wc) { + this.infoOrLowerWriteConcern = WriteConcern.valueOf(wc); + } + + protected void connectToMongo() throws UnknownHostException { + this.mongo = new Mongo(host, port); + this.db = mongo.getDB(database); + } + + @SuppressWarnings({ "unchecked" }) + @Override + protected void append(final LoggingEvent event) { + if (null == db) { + try { + connectToMongo(); + } catch (UnknownHostException e) { + throw new RuntimeException(e.getMessage(), e); + } + } + + BasicDBObject dbo = new BasicDBObject(); + if (null != applicationId) { + dbo.put(APP_ID, applicationId); + MDC.put(APP_ID, applicationId); + } + dbo.put(NAME, event.getLogger().getName()); + dbo.put(LEVEL, event.getLevel().toString()); + Calendar tstamp = Calendar.getInstance(); + tstamp.setTimeInMillis(event.getTimeStamp()); + dbo.put(TIMESTAMP, tstamp.getTime()); + + // Copy properties into document + Map props = event.getProperties(); + if (null != props && props.size() > 0) { + BasicDBObject propsDbo = new BasicDBObject(); + for (Map.Entry entry : props.entrySet()) { + propsDbo.put(entry.getKey().toString(), entry.getValue().toString()); + } + dbo.put(PROPERTIES, propsDbo); + } + + // Copy traceback info (if there is any) into the document + String[] traceback = event.getThrowableStrRep(); + if (null != traceback && traceback.length > 0) { + BasicDBList tbDbo = new BasicDBList(); + tbDbo.addAll(Arrays.asList(traceback)); + dbo.put(TRACEBACK, tbDbo); + } + + // Put the rendered message into the document + dbo.put(MESSAGE, event.getRenderedMessage()); + + // Insert the document + Calendar now = Calendar.getInstance(); + MDC.put(YEAR, now.get(Calendar.YEAR)); + MDC.put(MONTH, String.format("%1$02d", now.get(Calendar.MONTH) + 1)); + MDC.put(DAY, String.format("%1$02d", now.get(Calendar.DAY_OF_MONTH))); + MDC.put(HOUR, String.format("%1$02d", now.get(Calendar.HOUR_OF_DAY))); + + String coll = collectionLayout.format(event); + + MDC.remove(YEAR); + MDC.remove(MONTH); + MDC.remove(DAY); + MDC.remove(HOUR); + if (null != applicationId) { + MDC.remove(APP_ID); + } + + WriteConcern wc; + if (event.getLevel().isGreaterOrEqual(Level.WARN)) { + wc = warnOrHigherWriteConcern; + } else { + wc = infoOrLowerWriteConcern; + } + db.getCollection(coll).insert(dbo, wc); + } + + public void close() { + mongo.close(); + } + + public boolean requiresLayout() { + return true; + } } diff --git a/spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/AppenderTest.java b/spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/AppenderTest.java index 360ea5f41..de02fe58c 100644 --- a/spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/AppenderTest.java +++ b/spring-data-mongodb-log4j/src/test/java/org/springframework/data/mongodb/log4j/AppenderTest.java @@ -35,41 +35,41 @@ import org.junit.Test; */ public class AppenderTest { - private static final String NAME = AppenderTest.class.getName(); - private Logger log = Logger.getLogger(NAME); - private Mongo mongo; - private DB db; - private String collection; + private static final String NAME = AppenderTest.class.getName(); + private Logger log = Logger.getLogger(NAME); + private Mongo mongo; + private DB db; + private String collection; - @Before - public void setup() { - try { - mongo = new Mongo("localhost", 27017); - db = mongo.getDB("logs"); - Calendar now = Calendar.getInstance(); - collection = String.valueOf(now.get(Calendar.YEAR)) + String.format("%1$02d", now.get(Calendar.MONTH) + 1); - db.getCollection(collection).drop(); - } catch (UnknownHostException e) { - throw new RuntimeException(e.getMessage(), e); - } - } + @Before + public void setup() { + try { + mongo = new Mongo("localhost", 27017); + db = mongo.getDB("logs"); + Calendar now = Calendar.getInstance(); + collection = String.valueOf(now.get(Calendar.YEAR)) + String.format("%1$02d", now.get(Calendar.MONTH) + 1); + db.getCollection(collection).drop(); + } catch (UnknownHostException e) { + throw new RuntimeException(e.getMessage(), e); + } + } - @Test - public void testLogging() { - log.debug("DEBUG message"); - log.info("INFO message"); - log.warn("WARN message"); - log.error("ERROR message"); + @Test + public void testLogging() { + log.debug("DEBUG message"); + log.info("INFO message"); + log.warn("WARN message"); + log.error("ERROR message"); - DBCursor msgs = db.getCollection(collection).find(); - assertThat(msgs.count(), is(4)); + DBCursor msgs = db.getCollection(collection).find(); + assertThat(msgs.count(), is(4)); - } + } - @Test - public void testProperties() { - MDC.put("property", "one"); - log.debug("DEBUG message"); - } + @Test + public void testProperties() { + MDC.put("property", "one"); + log.debug("DEBUG message"); + } }