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

准备工作

可以先拿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的

  • 源码来源

猜你喜欢

转载自my.oschina.net/u/3776687/blog/1632046