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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 全彩孕交漫画福利啪啪吧 | 亚洲欧洲日产国码 最新 | 四虎www| 沉沦艳妇杨幂肉体小说 | 国产精品久久久久jk制服 | 99久久精品99999久久 | 亚洲欧美日韩综合在线播放 | 国产精品一区二区在线观看完整版 | 久久婷婷五月免费综合色啪 | 羞羞视频免费观看网站 | 九九大香尹人视频免费 | 三级小说网站 | 五月天久久久 | 国产成人久久精品一区二区三区 | 国产主播99 | 精品欧美| 成人私人影院在线观看网址 | 午夜影院在线免费观看 | 欧美透逼视频 | 射逼网 | 国产亚洲精aa在线观看香蕉 | 大象视频污 | jiujiure精品 | 国产第一页在线视频 | 精品性影院一区二区三区内射 | tube62hdxxxx日本| 久久er99热精品一区二区 | 97国产影院| 久久99亚洲AV无码四区碰碰 | 日本又黄又裸一级大黄裸片 | 无限资源在线观看高清 | 午夜亚洲精品久久久久久 | 青青热久免费精品视频精品 | 性一交一乱一伧老太 | 日韩播放 | 精品视频一区二区三区 | 暴露狂婷婷 | www一区二区 | 第一次破学生处破 | 男人插曲女人下面 | 免费午夜影片在线观看影院 |