亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

重學SpringBoot3之日志Logging使用方式

 更新時間:2024年06月11日 10:42:28   作者:CoderJia_  
在日常開發(fā)中會遇到不同的異常,日志方便我們?nèi)ヅ挪樘幚?這篇文章主要給大家介紹了關(guān)于重學SpringBoot3之日志Logging使用方式的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

引言

日志記錄是任何應(yīng)用程序開發(fā)過程中的一個重要部分,它幫助開發(fā)人員了解應(yīng)用程序的運行狀態(tài)、診斷問題并進行有效的錯誤跟蹤。SpringBoot3 提供了一個強大的日志管理系統(tǒng),支持各種日志框架,并提供了簡單的配置方法。本教程將介紹 SpringBoot3 中的日志系統(tǒng),包括默認配置、如何自定義日志設(shè)置以及如何使用不同的日志框架。

默認日志配置

日志門面

SpringBoot3 默認是使用 slf4j + Logback 作為默認的日志門面和實現(xiàn),但也支持其他日志系統(tǒng),如 Log4j2、JUL (Java Util Logging),這是通過所謂的日志門面實現(xiàn)的,開發(fā)者可以根據(jù)自己的需求選擇合適的日志實現(xiàn)框架進行配置。

在 SpringBoot 中,日志門面是指通過引入日志框架的抽象層來統(tǒng)一管理應(yīng)用程序中的日志輸出。SpringBoot 內(nèi)置了 Commons Logging、SLF4J 或 jboss-logging 作為日志抽象層(門面),具體的實現(xiàn)可以是 Log4j、JULLog4j2 或 Logback。

通過使用日志門面,開發(fā)者可以在不改變應(yīng)用程序代碼的情況下,靈活地切換和配置不同的日志實現(xiàn)框架,從而更好地適應(yīng)不同的部署環(huán)境和需求。這樣一來,開發(fā)者可以更方便地進行日志輸出的管理和調(diào)整,提高應(yīng)用程序的可維護性和擴展性。

如何實現(xiàn)默認配置

以導(dǎo)入 spring-boot-starter-web 為例,它會導(dǎo)入 spring-boot-starter。

spring-boot-starter 直接引入了 spring-boot-starter-logging 日志相關(guān)配配置(而不是通過 XxxAutoConfiguration,這是因為 SpringBoot 啟動的時候就要用到日志,需要內(nèi)置進 SpringBoot 中)。

日志相關(guān)文件在這里,可以看到相關(guān)的默認配置文件:

另外 spring-boot 包 additional-spring-configuration-metadata.json 文件下會有日志相關(guān)一些默認值的格式,這些默認值可以通過配置文件進行修改。

自定義日志配置

雖然默認配置對于開發(fā)時足夠使用,但在生產(chǎn)環(huán)境中,你可能需要自定義日志設(shè)置,例如更改日志級別、格式或輸出目的地。

日志級別

默認日志級別:

  • 由低到高:ALL,TRACE, DEBUG, INFO, WARN, ERROR,FATAL,OFF;

    • 只會打印指定級別及以上級別的日志
    • ALL:打印所有日志
    • TRACE:追蹤框架詳細流程日志,一般不使用
    • DEBUG:開發(fā)調(diào)試細節(jié)日志
    • INFO:關(guān)鍵、感興趣信息日志
    • WARN:警告但不是錯誤的信息日志,比如:版本過時
    • ERROR:業(yè)務(wù)錯誤日志,比如出現(xiàn)各種異常
    • FATAL:致命錯誤日志,比如 jvm系統(tǒng)崩潰
    • OFF:關(guān)閉所有日志記錄
  • 不指定級別的所有類,都使用 root 指定的級別作為默認級別

  • SpringBoot3 日志默認級別是 INFO

你可以在 application.yml 或 application.properties 文件中設(shè)置不同包的日志級別:

logging:
  level:
    root: WARN
    org.springframework.web: DEBUG
    com.coderjia: INFO

這里,root 級別被設(shè)為 WARNSpring web 包日志級別設(shè)為 DEBUG,而你自己的公司代碼 com.coderjia 設(shè)為 INFO 級別。

日志分組

可以將相關(guān)的包分組在一起,統(tǒng)一進行日志級別配置配置。比如:Tomcat 相關(guān)的日志統(tǒng)一設(shè)置。

logging:
  group:
    tomcat: org.apache.catalina,org.apache.coyote,org.apache.tomcat
  level:
    root: debug
    sql: debug
    tomcat: info
    web: info

以上將 org.apache.catalina,org.apache.coyote,org.apache.tomcat 分組為 tomcat,并通過 logging.level.tomcat=info 將 tomcat 組日志級別設(shè)置為 info。另外 SpringBoot 預(yù)定義兩個組 sql 和 web

  • web:org.springframework.core.codec, org.springframework.http, org.springframework.web, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeans ;
  • sql:org.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener。

日志格式

默認日志格式如下:

2024-03-06T11:30:42.611+08:00  INFO 31412 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 8083 (http) with context path ''
2024-03-06T11:30:42.618+08:00  INFO 31412 --- [           main] c.c.b.SpringBoot303LoggingApplication    : Started SpringBoot303LoggingApplication in 1.602 seconds (process running for 2.442)

格式:

  • 時間和日期:毫秒級精度
  • 日志級別:ERROR, WARN, INFO, DEBUG, or TRACE
  • 進程 ID
  • —: 消息分割符
  • 線程名: 使用 [] 包含
  • Logger 名: 通常是產(chǎn)生日志的類名
  • 消息: 日志記錄的內(nèi)容

默認值:可以參照 spring-boot 包additional-spring-configuration-metadata.json文件中的 logging.pattern.console 項:

日志輸出格式默認值

可修改為:

logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{15} : %msg%n'
    dateformat: '"yyyy-MM-dd HH:mm"'
  • logging.pattern.console :定義輸出的格式,
  • logging.pattern.dateformat: 定義輸出日期格式。
2024-03-06 11:36:51 INFO  [main] o.s.b.w.e.t.TomcatWebServer : Tomcat started on port 8083 (http) with context path ''

日志輸出

默認情況下,日志輸出到控制臺。但你可以配置它輸出到文件或同時輸出到文件和控制臺:

logging:
  file:
    name: my.log
  	path: /var/logs

這將會在 /var/logs 路徑下創(chuàng)建一個 my.log 文件記錄日志,logging.file.name=/var/log/my.log 也可以即定義路徑又定義名稱。

## 日志歸檔

如果使用 SpringBoot 默認的 Logback 框架,可以通過 application.properties/yaml 文件指定日志歸檔文件名和滾動規(guī)則,如果是其他日志系統(tǒng),需要自行配置(添加 log4j2.xml 或 log4j2-spring.xml)。

logging:
  logback:
    rollingpolicy:
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz)
      max-file-size: 12MB

配置項如下:

配置項描述
logging.logback.rollingpolicy.file-name-pattern日志存檔的文件名格式(默認值:${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz)
logging.logback.rollingpolicy.clean-history-on-start應(yīng)用啟動時是否清除以前存檔(默認值:false)
logging.logback.rollingpolicy.max-file-size存檔前,每個日志文件的最大大小(默認值:10MB)
logging.logback.rollingpolicy.total-size-cap日志文件被刪除之前,可以容納的最大大小(默認值:0B)。設(shè)置 1GB 則磁盤存儲超過 1GB 日志后就會刪除舊日志文件
logging.logback.rollingpolicy.max-history日志文件保存的最大天數(shù)(默認值:7).

自定義 Logback 配置

對于更高級的配置,例如滾動策略、過濾器等,你可以通過提供自定義的 Logback 配置文件來實現(xiàn)。創(chuàng)建一個名為 logback-spring.xml 的文件,并放在 src/main/resources 目錄下:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

這個自定義配置將日志輸出格式修改為指定的模式,另外建議自定義配置,配置文件名加上 xxx-spring.xml(例如,logback-spring.xml 而不是 logback.xml),這樣更容易被Spring。

切換日志框架

如果你更喜歡使用 Log4j2 而不是 Logback,你可以輕松切換。首先,排除 SpringBoot 的默認日志啟動器,然后添加 Log4j2 的依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

然后,你可以像以前一樣配置 Log4j2,Spring Boot 會自動識別并應(yīng)用 Log4j2 的配置。此外如果引入的依賴中自帶日志和當前 SpringBoot 默認日志不一致,也可以排查掉依賴中的日志組件。

日志使用

方式一:LoggerFactory 獲取Logger對象

在需要打日志的類中定義。

@SpringBootApplication
public class SpringBoot303LoggingApplication {

    private static Logger log = LoggerFactory.getLogger(SpringBoot303LoggingApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(SpringBoot303LoggingApplication.class, args);

        log.info("啟動完成");
    }
}

方式二:引入 lombok

使用 @Slf4j 注解可以自動生成一個 log 對象,省去了手動獲取 Logger 對象的步驟,簡化了代碼編寫。

導(dǎo)入依賴:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>compile</scope>
</dependency>

添加注接 @Slf4j:

@Slf4j
@SpringBootApplication
public class SpringBoot303LoggingApplication {

    // private static Logger log = LoggerFactory.getLogger(SpringBoot303LoggingApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(SpringBoot303LoggingApplication.class, args);

        log.info("啟動完成");
    }
}

總結(jié)

SpringBoot3 提供了一個靈活且強大的日志系統(tǒng),支持多種日志框架和豐富的配置選項。通過適當?shù)呐渲?,你可以輕松管理和監(jiān)控你的應(yīng)用程序日志,幫助你更有效地開發(fā)和維護你的 SpringBoot 應(yīng)用。理解和掌握 SpringBoot 中的日志配置,將使你能夠更好地控制應(yīng)用程序的日志記錄行為。

相關(guān)文章

  • Struts1簡介和入門_動力節(jié)點Java學院整理

    Struts1簡介和入門_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Struts1簡介和入門的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java實現(xiàn)圖片裁剪功能的示例詳解

    Java實現(xiàn)圖片裁剪功能的示例詳解

    這篇文章主要介紹了如何利用Java實現(xiàn)圖片裁剪功能,可以將圖片按照自定義尺寸進行裁剪,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-01-01
  • Mybatis Plugin攔截器開發(fā)過程詳解

    Mybatis Plugin攔截器開發(fā)過程詳解

    這篇文章主要介紹了Mybatis Plugin攔截器開發(fā)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 詳解使用Spring的restTemplete進行Http請求

    詳解使用Spring的restTemplete進行Http請求

    本篇文章主要介紹了詳解使用Spring的restTemplete進行Http請求,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 郵件收發(fā)原理你了解嗎? 郵件發(fā)送基本過程與概念詳解(一)

    郵件收發(fā)原理你了解嗎? 郵件發(fā)送基本過程與概念詳解(一)

    你真的了解郵件收發(fā)原理嗎?這篇文章主要為大家詳細介紹了郵件發(fā)送基本過程與概念,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • web中拖拽排序和java后臺交互實現(xiàn)方法示例

    web中拖拽排序和java后臺交互實現(xiàn)方法示例

    這篇文章主要給大家介紹了關(guān)于web中拖拽排序和java后臺交互實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • SpringBoot實現(xiàn)過濾器和攔截器的方法

    SpringBoot實現(xiàn)過濾器和攔截器的方法

    大家應(yīng)該都曉得實現(xiàn)過濾器需要實現(xiàn)?javax.servlet.Filter?接口,而攔截器會在處理指定請求之前和之后進行相關(guān)操作,配置攔截器需要兩步,本文通過實例代碼給大家介紹SpringBoot?過濾器和攔截器的相關(guān)知識,感興趣的朋友一起看看吧
    2022-11-11
  • SpringBoot實現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)

    SpringBoot實現(xiàn)動態(tài)數(shù)據(jù)源切換的方法總結(jié)

    項目開發(fā)中經(jīng)常會遇到多數(shù)據(jù)源同時使用的場景,比如冷熱數(shù)據(jù)的查詢等情況,所以接下來本文就來介紹一下如何使用實現(xiàn)自定義注解的形式來實現(xiàn)動態(tài)數(shù)據(jù)源切換吧
    2023-12-12
  • dubbo新手學習之事件通知實踐教程

    dubbo新手學習之事件通知實踐教程

    這篇文章主要給大家介紹了關(guān)于dubbo新手學習之事件通知實踐的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java?Mybatis框架由淺入深全解析下篇

    Java?Mybatis框架由淺入深全解析下篇

    MyBatis是一個優(yōu)秀的持久層框架,它對jdbc的操作數(shù)據(jù)庫的過程進行封裝,使開發(fā)者只需要關(guān)注SQL本身,而不需要花費精力去處理例如注冊驅(qū)動、創(chuàng)建connection、創(chuàng)建statement、手動設(shè)置參數(shù)、結(jié)果集檢索等jdbc繁雜的過程代碼,本文將作為最終篇為大家介紹MyBatis的使用
    2022-07-07

最新評論