Pre-requisites

Privateer (used only in unit tests - a copy is in the lib dir, in case you can't get it
from the central Maven repo)

Additional dependency notes:

Version 0.3.2 of log4mongo-java will work with MongoDB Java driver versions only up
to 2.0. The 2.1 driver includes a source compatible, but binary incompatible, change to
a DBCollection.insert() method used by log4mongo-java.

Installation / Build / Configuration

If you downloaded a pre-built jar file, skip step 4.

Start local MongoDB servers running as a replica set. This is required for the replica set
part of the unit tests. The --smallfiles arg makes the unit tests run about twice as fast,
since databases are created and dropped several times, though it generally should not
be used in production. The --noprealloc and --nojournal options are also to speed up tests
and should not generally be used in production.

Wait about a minute until the replica set is established. You can run rs.status() in the mongo shell to look for direct confirmation it is ready.

Build the JAR file using Maven2. The following command will run all the unit tests.

$ mvn clean package

Deploy the target/log4mongo-java-x.y.jar file, along with the Log4J and MongoDB
Java driver jars, into the classpath of your Java application

Configure log4j as usual, referring to the log4j.properties.sample file for
the specific configuration properties the appender supports. The Java package for
the classes changed to org.log4mongo in the 0.7 release, so make sure you specify
the fully qualified class name of the appender class correctly.

The TestMongoDbAppenderHosts test case tests logging to replica sets. See notes in that test case
for starting multiple mongod instances as a replica set.

ToDos

More unit tests

connection failures

Clean up BSONification code - currently it's functional but skanky.
Consider using daybreak for this [4].

Notes on Date Handling

MongoDB (actually BSON) supports datetimes as a native data type [5]
and all drivers are supposed to handle conversion from client-native
date type (java.util.Date in Java) to BSON representation of date in miliseconds
since the Unix epoch.

However, MongoDB built-in console (bin/mongo) does represent dates formatted,
even the dates were saved in native data type, which may be confusing [6].
See testTimestampStoredNatively in tests (TestMongoDbAppender.java) if you want to get an idea.