您的位置:首页 > 理论基础 > 计算机网络

Spring Cloud Spring Boot mybatis分布式微服务云架构(四十二)使用log4j实现http请求日志入mongodb(1)

2018-03-09 09:59 1346 查看

准备工作

可以先拿Chapter4-2-4工程为基础,进行后续的实验改造。该工程实现了一个简单的REST接口,一个对web层的切面,并在web层切面前后记录http请求的日志内容。

通过自定义appender实现

思路:log4j提供的输出器实现自Appender接口,要自定义appender输出到MongoDB,只需要继承AppenderSkeleton类,并实现几个方法即可完成。

引入mongodb的驱动

在pom.xml中引入下面依赖

<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
<version>3.2.2</version>
</dependency>


实现MongoAppender

编写MongoAppender类继承AppenderSkeleton,实现如下:

public class MongoAppender  extends AppenderSkeleton {

private MongoClient mongoClient;
private MongoDatabase mongoDatabase;
private MongoCollection<BasicDBObject> logsCollection;

private String connectionUrl;
private String databaseName;
private String collectionName;

@Override
protected void append(LoggingEvent loggingEvent) {

if(mongoDatabase == null) {
MongoClientURI connectionString = new MongoClientURI(connectionUrl);
mongoClient = new MongoClient(connectionString);
mongoDatabase = mongoClient.getDatabase(databaseName);
logsCollection = mongoDatabase.getCollection(collectionName, BasicDBObject.class);
}
logsCollection.insertOne((BasicDBObject) loggingEvent.getMessage());

}

@Override
public void close() {
if(mongoClient != null) {
mongoClient.close();
}
}

@Override
public boolean requiresLayout() {
return false;
}

// 省略getter和setter

}


定义MongoDB的配置参数,可通过log4j.properties配置:

connectionUrl:连接mongodb的串

databaseName:数据库名

collectionName:集合名

定义MongoDB的连接和操作对象,根据log4j.properties配置的参数初始化:

mongoClient:mongodb的连接客户端

mongoDatabase:记录日志的数据库

logsCollection:记录日志的集合

重写append函数:

根据log4j.properties中的配置创建mongodb连接

LoggingEvent提供getMessage()函数来获取日志消息

往配置的记录日志的collection中插入日志消息

重写close函数:关闭mongodb的


源码来源
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐