Spring Cloud Spring Boot mybatis分佈式微服務雲架構(四十二)使用log4j實現http請求日誌入mongodb(1)

準備工做

能夠先拿Chapter4-2-4工程爲基礎,進行後續的實驗改造。該工程實現了一個簡單的REST接口,一個對web層的切面,並在web層切面先後記錄http請求的日誌內容。html

經過自定義appender實現

思路:log4j提供的輸出器實現自Appender接口,要自定義appender輸出到MongoDB,只須要繼承AppenderSkeleton類,並實現幾個方法便可完成。git

引入mongodb的驅動

在pom.xml中引入下面依賴web

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

實現MongoAppender

編寫MongoAppender類繼承AppenderSkeleton,實現以下:mongodb

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配置的參數初始化:app

    • mongoClient:mongodb的鏈接客戶端
    • mongoDatabase:記錄日誌的數據庫
    • logsCollection:記錄日誌的集合
  • 重寫append函數:ide

    • 根據log4j.properties中的配置建立mongodb鏈接
    • LoggingEvent提供getMessage()函數來獲取日誌消息
    • 往配置的記錄日誌的collection中插入日誌消息
  • 重寫close函數:關閉mongodb的函數

  • 源碼來源ui

相關文章
相關標籤/搜索