激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 編程語言 - Java教程 - springboot實現將自定義日志格式存儲到mongodb中

springboot實現將自定義日志格式存儲到mongodb中

2021-10-22 10:56從放棄到入門 Java教程

這篇文章主要介紹了springboot實現將自定義日志格式存儲到mongodb中的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

步驟如下

首先定義封裝所需要的日志信息的實體類

?
1
2
3
4
5
6
7
8
9
10
11
public class MyLog {
       //根據需要定義字段
        @Id
        private String id;
        private Date ts;
        private String level;
        private String msg;
        private String thread;
       
       //屬性的get/set方法(略)
}

定義操作mongodb的接口

?
1
2
3
@Repository
   public interface LogRepository extends MongoRepository<MyLog, String>{
}

定義一個MongoDBAppender繼承UnsynchronizedAppenderBase

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Component
Public class MongoDBAppender extends UnsynchronizedAppenderBase<LoggingEvent> implements ApplicationContextAware{
private static LogRepository logRepository;
protected void append(LoggingEvent e){
       MyLog myLog = new MyLog();
       myLog.setLevel(e.getLevel().toString());
       myLog.setMsg(e.getFormattedMessage());
       myLog.setThread(e.getThreadName());
       myLog.setTs(new Date(e.getTimeStamp()));
       logRepository.save(myLog);
}
 
Public void setApplicationContext(ApplicationContext applicationContext) {
        if (applicationContext.getAutowireCapableBeanFactory()
                .getBean(LogRepository.class) != null) {
            logRepository = (LogRepository) applicationContext
                 .getAutowireCapableBeanFactory()
                 .getBean(LogRepository.class);
        }
}
}

以上是java代碼部分

下面就是自定義日志文件logback.xml的配置了

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="UTF-8"?>
<configuration >
   <contextName>logback</contextName>
   <!—設置變量:輸出格式 -->
   <property name="log.format" value="%d [%thread] %-5level %logger{68} %line - logId[[%X{client}][%X{request_id}]] - %msg%n"/>
   <!-- 輸出到控制臺 -->
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>UTF-8</charset>
            <pattern>${log.format}</pattern>
        </encoder>
    </appender>
  <!--輸出到mongodb中-->
    <appender name="MONGODB" class="cn.mis.mongo.appender.MongoDBAppender">
  </appender
    
 <root level="INFO">
         <appender-ref ref="STDOUT" />
         <appender-ref ref="MONGODB" />
     </root>
<logger name="com.mis.mongo.controller.DemoController"
level="WARN" additivity="false">
        <appender-ref ref=" MONGODB "/>
         </logger
</configuration>

下面簡要的介紹一下自定義日志配置文件中的內容

首先介紹一下日志選型的原因

Spring Boot在所有內部日志中使用Commons Logging,但是默認配置也提供了對常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每種Logger都可以通過配置使用控制臺或者文件輸出日志內容。

Logback是log4j框架的作者開發的新一代日志框架,它效率更高、能夠適應諸多的運行環境,同時天然支持SLF4J。SpringBoot默認使用Logback。

自定義日志配置

由于日志服務一般都在ApplicationContext創建前就初始化了,它并不是必須通過Spring的配置文件控制。因此通過系統屬性和傳統的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

根據不同的日志系統,你可以按如下規則組織配置文件名,就能被正確加載:

springboot實現將自定義日志格式存儲到mongodb中

Spring Boot官方推薦優先使用帶有-spring的文件名作為你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名為logback-spring.xml的日志配置文件,spring boot可以為它添加一些spring boot特有的配置項(下面會提到)。

根節點<configuration>包含的屬性

scan:當此屬性設置為true時,配置文件如果發生改變,將會被重新加載,默認值為true。

scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。

debug:當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為false。

根節點<configuration>的子節點:

<configuration>下面一共有2個屬性,3個子節點,分別是:

屬性一:設置上下文名稱<contextName>

每個logger都關聯到logger上下文,默認上下文名稱為“default”。但可以使用設置成其他名字,用于區分不同應用程序的記錄。一旦設置,不能修改,可以通過%contextName來打印日志上下文名稱。

屬性二:設置變量<property>

用來定義變量值的標簽,有兩個屬性,name和value;其中name的值是變量的名稱,value的值時變量定義的值。通過定義的值會被插入到logger上下文中。定義變量后,可以使“${}”來使用變量

子節點一<appender>

springboot實現將自定義日志格式存儲到mongodb中

appender用來格式化日志輸出節點,有倆個屬性name和class,class用來指定哪種輸出策略,常用就是控制臺輸出策略和文件輸出策略。

控制臺輸出ConsoleAppender

<encoder>表示對日志進行編碼:

  • %d{HH: mm:ss.SSS}——日志輸出時間
  • %thread——輸出日志的進程名字,這在Web應用以及異步任務處理中很有用
  • %-5level——日志級別,并且使用5個字符靠左對齊
  • %logger{36}——日志輸出者的名字
  • %msg——日志消息
  • %n——平臺的換行符

子節點二<root>

root節點是必選節點,用來指定最基礎的日志輸出級別,只有一個level屬性。

level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,不能設置為INHERITED或者同義詞NULL。

默認是DEBUG。

可以包含零個或多個元素,標識這個appender將會添加到這個loger。

子節點三<logger>

<logger>用來設置某一個包或者具體的某一個類的日志打印級別、以及指定<appender>。<logger>僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。

name:用來指定受此loger約束的某一個包或者具體的某一個類。

level:用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特俗值INHERITED或者同義詞NULL,代表強制執行上級的級別。如果未設置此屬性,那么當前loger將會繼承上級的級別。

addtivity:是否向上級loger傳遞打印信息。默認是true。

logger在實際使用的時候有兩種情況

第一種:帶有loger的配置,不指定級別,不指定appender

第二種:帶有多個loger的配置,指定級別,指定appender

先來看一看代碼中如何使用

我們可以通過logger對象輸出不同級別的日志信息

springboot實現將自定義日志格式存儲到mongodb中

以下兩種方式均可實現對具體方法進行不同級別的日志管理

springboot實現將自定義日志格式存儲到mongodb中

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/ssswd163/article/details/88956091

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7472021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
主站蜘蛛池模板: 成年性羞羞视频免费观看无限 | 久久久精品视频国产 | 色视频一区二区 | 青草久久久久 | 久久午夜神器 | 国产免费激情视频 | 国产精品免费大片 | 神马久久蜜桃 | 黄色片网站免费在线观看 | 一本色道久久99精品综合蜜臀 | 爱操影视| 18视频在线观看娇喘 | 免费国产不卡午夜福在线 | 欧美亚洲一级 | av性色全交蜜桃成熟时 | 久久99久久99精品 | 日韩一级免费毛片 | 女人久久久www免费人成看片 | 久色乳综合思思在线视频 | 精品亚洲一区二区三区 | 羞羞视频一区 | 一级毛片免费在线 | 久久精精 | 最新日本中文字幕在线观看 | 国产成人午夜高潮毛片 | 亚洲国产超高清a毛毛片 | 欧美成人午夜精品久久久 | 羞羞视频免费网站男男 | 宅男噜噜噜66国产在线观看 | 欧美视频一二三区 | chengrenyingshi| 国产精品一区二区手机在线观看 | 亚洲国产成人一区 | 香蕉视频1024 | 亚洲综合中文 | 97久久日一线二线三线 | 精品国产91久久久久久久妲己 | 国产精品久久久网站 | 国产精品免费一区二区三区四区 | 午夜在线视频一区二区三区 | 艹男人的日日夜夜 |