欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot實現(xiàn)將自定義日志格式存儲到mongodb中

 更新時間:2021年07月26日 14:45:56   作者:從放棄到入門  
這篇文章主要介紹了springboot實現(xiàn)將自定義日志格式存儲到mongodb中的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

步驟如下

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

public class MyLog {
       //根據(jù)需要定義字段
        @Id
        private String id;
        private Date ts;
        private String level;
        private String msg;
        private String thread;
       
       //屬性的get/set方法(略)
}

定義操作mongodb的接口

@Repository
   public interface LogRepository extends MongoRepository<MyLog, String>{
}

定義一個MongoDBAppender繼承UnsynchronizedAppenderBase

@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的配置了

<?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>

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

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

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

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

自定義日志配置

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

根據(jù)不同的日志系統(tǒng),你可以按如下規(guī)則組織配置文件名,就能被正確加載:

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

根節(jié)點<configuration>包含的屬性

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

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

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

根節(jié)點<configuration>的子節(jié)點:

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

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

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

屬性二:設置變量<property>

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

子節(jié)點一<appender>

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

控制臺輸出ConsoleAppender

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

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

子節(jié)點二<root>

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

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

默認是DEBUG。

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

子節(jié)點三<logger>

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

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

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

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

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

第一種:帶有l(wèi)oger的配置,不指定級別,不指定appender

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

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

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

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • JAVA函數(shù)的定義、使用方法實例分析

    JAVA函數(shù)的定義、使用方法實例分析

    這篇文章主要介紹了JAVA函數(shù)的定義、使用方法,結合實例形式分析了JAVA函數(shù)的基本概念、功能、原理、定義、使用方法與操作注意事項,需要的朋友可以參考下
    2020-04-04
  • 解決mybatis?update并非所有字段需要更新問題

    解決mybatis?update并非所有字段需要更新問題

    這篇文章主要介紹了解決mybatis?update并非所有字段需要更新問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java多線程 CompletionService

    Java多線程 CompletionService

    這篇文章主要介紹了Java多線程 CompletionService,CompletionService用于提交一組Callable任務,其take方法返回已完成的一個Callable任務對應的Future對象,需要的朋友可以參考一下文章詳細內(nèi)容
    2021-10-10
  • Spring Boot 項目中整合 MyBatis 和 PageHelper的基本步驟

    Spring Boot 項目中整合 MyBatis 和 PageHel

    這篇文章主要介紹了Spring Boot 項目中整合 MyBatis 和 PageHelper的操作步驟,整合 PageHelper 到 Spring Boot 項目中主要包括添加依賴、配置數(shù)據(jù)源與 MyBatis、配置 PageHelper 以及在業(yè)務邏輯中使用 PageHelper 進行分頁查詢,需要的朋友可以參考下
    2024-04-04
  • 基于springboot搭建的web系統(tǒng)架構的方法步驟

    基于springboot搭建的web系統(tǒng)架構的方法步驟

    這篇文章主要介紹了基于springboot搭建的web系統(tǒng)架構的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Dubbo+Nacos服務啟動報錯,返回unknown user的問題

    Dubbo+Nacos服務啟動報錯,返回unknown user的問題

    這篇文章主要介紹了Dubbo+Nacos服務啟動報錯,返回unknown user的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • maven項目打包上傳到私有倉庫

    maven項目打包上傳到私有倉庫

    在項目開發(fā)中通常會引用其他的jar,怎樣把自己的項目做為一個jar包的形式發(fā)布到私服倉庫中,本文就詳細的介紹一下,感興趣的可以了解一下
    2021-06-06
  • java ThreadLocal線程局部變量常用方法使用場景示例詳解

    java ThreadLocal線程局部變量常用方法使用場景示例詳解

    這篇文章主要介紹了為大家java ThreadLocal線程局部變量常用方法使用場景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java整型數(shù)與網(wǎng)絡字節(jié)序byte[]數(shù)組轉換關系詳解

    Java整型數(shù)與網(wǎng)絡字節(jié)序byte[]數(shù)組轉換關系詳解

    這篇文章主要介紹了Java整型數(shù)與網(wǎng)絡字節(jié)序byte[]數(shù)組轉換關系,結合實例形式歸納整理了java整型數(shù)和網(wǎng)絡字節(jié)序的byte[]之間轉換的各種情況,需要的朋友可以參考下
    2017-08-08
  • java中switch選擇語句代碼詳解

    java中switch選擇語句代碼詳解

    這篇文章主要介紹了java中switch選擇語句代碼詳解,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12

最新評論