日志入库
实现方式
有两种方式:
-
自定义 appender
-
使用官方定义好的 appender
实战
环境:
jdk: 1.8
mongodb: 3.4.4 (未设置登录密码)
jar 引入
按照官方 demo, log4j2 版本为: 2.11.0
。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-mongodb3</artifactId>
<version>2.11.0</version>
</dependency>
<!--mongodb-->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.2</version>
</dependency>
log4j 配置
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<NoSql name="databaseAppender">
<MongoDb3 databaseName="applicationDb" collectionName="applicationLog" server="127.0.0.1"
/>
</NoSql>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="databaseAppender"/>
</Root>
</Loggers>
</Configuration>
测试简单方法
- LogMain.java
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LogMain {
private static Logger LOG = LogManager.getLogger(LogMain.class);
public static void main(String[] args) {
LOG.error("error");
}
}
运行 main()
即可。
- 查询入库信息
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.junit.Test;
public class MongoDbLogTest {
@Test
public void findDocumentTest() {
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase mongoDatabase = mongoClient.getDatabase("applicationDb");
MongoCollection<Document> collection = mongoDatabase.getCollection("applicationLog");
//检索所有文档
FindIterable<Document> findIterable = collection.find();
for (Document aFindIterable : findIterable) {
System.out.println(aFindIterable);
}
}
}
日志如下:
Document{{_id=5b529b07ebea9a99670e090b, level=ERROR, loggerName=com.github.houbb.mongdb.log.LogMain, message=error, source=Document{{className=com.github.houbb.mongdb.log.LogMain, methodName=hello, fileName=LogMain.java, lineNumber=27}}, marker=null, threadId=1, threadName=main, threadPriority=5, millis=1532140295301, date=Sat May 31 10:31:35 CST 2017, thrown=null, contextMap=Document{{}}, contextStack=[]}}
总结
实际使用中,可以使用 mongodb 做 warn 以上日志信息,或者重要的日志信息记录。
便于分析查询。
- 2.11.0 以前的版本如何使用?
本质只是一个 Log4j2 Appender,我们可以自定义一个。
可以参考源码中的 MongoDbProvider