一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - SpringBoot中logback日志保存到mongoDB的方法

SpringBoot中logback日志保存到mongoDB的方法

2021-02-06 11:33天涯淚小武 Java教程

這篇文章主要介紹了SpringBoot中logback日志保存到mongoDB的方法,

?Springboot默認集成的就是logback,logback相對來說是優秀于log4j的,log4j2也是參考了logback的設計。

自定義Appender非常簡單,繼承一下AppenderBase類即可。

可以看到有個AppenderBase,有個UnsynchronizedAppenderBase,還有個AsyncAppenderBase繼承了UnsynchronizedAppenderBase。從名字就能看出來區別,異步的、普通的、不加鎖的。

我們定義一個MongoDBAppender繼承UnsynchronizedAppenderBase

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class MongoDBAppender extends
    UnsynchronizedAppenderBase<ILoggingEvent> {
 
  @Override
  protected void append(ILoggingEvent eventObject) {
    MongoTemplate mongoTemplate = ApplicationContextProvider.getBean(MongoTemplate.class);
    if (mongoTemplate != null) {
      final BasicDBObject doc = new BasicDBObject();
      doc.append("level", eventObject.getLevel().toString());
      doc.append("logger", eventObject.getLoggerName());
      doc.append("thread", eventObject.getThreadName());
      doc.append("message", eventObject.getFormattedMessage());
      mongoTemplate.insert(doc, "log");
    }
  }
 
}

必須要實現一個append方法,這個方法就是logback輸出日志的地方,日志都保存在eventObject對象中,我們只需要獲取對象里的值并做自己的處理即可。

我們可以想象為,系統的ConsoleAppender就是不停的System.out.print(eventObject.getXXX),而FileAppender就是用OutpuptStream輸出到文件里。

我們要做的就是把日志保存到mongo里,Springboot已經提供了MongoTemplate模板,需要注意日志輸出是隨著系統啟動就開始的,而剛開始時MongoTemplate還沒有被初始化,是需要等待Spring給MongoTemplate賦值的。所以剛開始時為null,需要等spring初始化完畢,MongoTemplate才有值。

由于這個Appender不歸spring管理,所以我采用單獨獲取bean的方式。其中ApplicationContextProvider如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Component
public class ApplicationContextProvider implements ApplicationContextAware {
  private static ApplicationContext context;
 
  public static ApplicationContext getApplicationContext() {
    return context;
  }
 
  @Override
  public void setApplicationContext(ApplicationContext ac)
      throws BeansException {
    context = ac;
  }
 
  public static <T> T getBean(Class<T> tClass) {
    return context.getBean(tClass);
  }
 
  public static <T> T getBean(String name, Class<T> tClass) {
    return context.getBean(name, tClass);
  }
}

上面mongo操作日志入庫的比較簡單,字段也沒有用完,大家可以根據自己希望保存的屬性來設計mongo的結構,然后入庫。

pom.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>3.4.2</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-core</artifactId>
  <version>1.1.11</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.1.11</version>
</dependency>

在Spring-logback.xml使用也很簡單 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <include resource="org/springframework/boot/logging/logback/base.xml" />
 
  <appender name="MY_FILE" class="com.example.demo.mongo.MongoDBAppender">
  </appender>
  <!-- 測試環境+開發環境. 多個使用逗號隔開. -->
  <springProfile name="test,dev">
    <logger name="org.springframework.web" level="INFO">
      <appender-ref ref="MY_FILE"/>
    </logger>
    <logger name="com.example" level="INFO" />
  </springProfile>
 
 
</configuration>

只需要指明appender 的class即可。就是這么簡單。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/tianyaleixiaowu/article/details/73332313

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产一区二区精品久久 | 欧美一卡2卡3卡无卡 | 免费xxxxx大片在线观看影视 | 日本久久影视 | 午夜十八岁禁 | 风间由美在线 | www.午夜剧场 | 欧美一级精品 | 电车痴汉中文字幕 | 国内体内she精视频免费 | 日韩aⅴ在线观看 | 国产精品51麻豆cm传媒 | 国产成人一区二区三区在线视频 | 国产亚洲欧美日韩综合综合二区 | 亚洲精品一二三四 | 果冻传媒林予曦图片 | 91探花在线观看 | 四虎精品免费国产成人 | 亚洲AV无码国产精品色在线看 | 欧美一卡2卡三卡4卡5卡免费观看 | 色中文网| 青久久 | 非洲黑人又大粗gay 非洲黑人bbwbbwbbw | 日本大片在线 | 国产一区二区三区久久小说 | 福利入口在线观看 | 欧美日韩亚洲一区二区三区在线观看 | 交换朋友夫妇3中文字幕 | 日韩视频第二页 | 国产精品久久久久久久午夜片 | 麻生希在线 | 国产精品视频二区不卡 | 亚洲成人91 | 久久婷婷五月综合色丁香 | 欧美男同猛男 videos 同性 | 人人九九精| 华人亚洲欧美精品国产 | 久久久久青草大香线综合精品 | 恩不要好大好硬好爽3p | 亚洲视频第一页 | 久久偷拍国2017的 |