最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaEE之SpringBoot日志使用及說明

 更新時間:2026年01月08日 09:18:06   作者:蘇小瀚  
文章介紹了日志的定義、作用、使用方法、日志框架、日志級別、日志配置以及使用注解@Slf4j簡化日志打印的過程

1. 日志的介紹

日志就是程序在運(yùn)行過程中記錄下來程序所做的工作。

2. 日志的作用

系統(tǒng)監(jiān)控,我們可以通過日志來記錄系統(tǒng)的工作狀況,及時發(fā)現(xiàn)問題。

數(shù)據(jù)采集,通過日志獲取到用戶請求的數(shù)據(jù),對數(shù)據(jù)進(jìn)行分析,進(jìn)而推測出用戶的特點(diǎn)。

日志審計,可以通過日志來判斷一些網(wǎng)絡(luò)安全問題。

3. 日志的使用

3.1 認(rèn)識日志

我們在啟動Spring Boot項目時候,就會發(fā)現(xiàn)控制臺打印了很多日志,我們就分析下這些日志的結(jié)構(gòu):

如果我們在該項目的配置文件中,沒有寫下面的配置信息,此時打印的日志里面就不會顯示項目名稱:

spring:
  application:
    name: spring-captcha-demo

3.2 使用日志

我們創(chuàng)建一個類來打印日志:

Spring Boot給我們提供了一個打印日志的框架,我們直接使用就行,使用LoggerFactory類里面的getLogger方法,參數(shù)是類對象,來打印出來的日志就會顯示是哪個類打印的日志,然后調(diào)用日志對象的info方法,輸入日志內(nèi)容,就會打印出來日志。

package com.sias.log.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/log")
@RestController
public class LogController {
    //生成一個日志對象
    private Logger logger = LoggerFactory.getLogger(LogController.class);

    @RequestMapping("/print")
    public String print() {
        //普通輸出打印日志
        System.out.println("打印日志");
        //使用info方法打印日志
        logger.info("打印日志");
        return "打印日志";
    }
}

打印結(jié)果:

使用info方法打印出來的日志,格式就是Spring Boot自帶的格式。

3.3 日志框架介紹

  • 日志門面: SLF4J
  • 日志實(shí)現(xiàn):log4J  JUL  logback

這里的日志門面相當(dāng)于是一種規(guī)范,不具體實(shí)現(xiàn)操作,而是直接調(diào)用日志實(shí)現(xiàn)的框架,具體的操作實(shí)現(xiàn)由下面三個框架去實(shí)現(xiàn)。

門面模式介紹

上面的這種設(shè)計模式就是門面模式,提供一個統(tǒng)一的接口去使用,這個接口再去調(diào)用其他子接口,更方便的去調(diào)用子接口。

比如我們想要關(guān)家里的燈,但是需要關(guān)很多開關(guān)但是此時我們可以設(shè)置一個總開關(guān),來控制所有的燈,直接關(guān)閉這個總開關(guān)就可以關(guān)閉所有的燈。

代碼簡單實(shí)現(xiàn):

控制所有子接口的類:

package com.sias.log.facade;

public class FacadeClient {
    private BedRoomLight bedRoomLight = new BedRoomLight();
    private LivingRoomLight livingRoomLight = new LivingRoomLight();
    private HallLight hallLight = new HallLight();

    //開燈
    void on() {
        bedRoomLight.on();
        livingRoomLight.on();
        hallLight.on();
    }
    //關(guān)燈
    void off() {
        bedRoomLight.off();
        livingRoomLight.off();
        hallLight.off();
    }
}

子接口類:

public class BedRoomLight implements Light {
    @Override
    public void on() {
        System.out.println("打開臥室燈");
    }

    @Override
    public void off() {
        System.out.println("關(guān)閉臥室燈");
    }
}
public class LivingRoomLight implements Light {
    @Override
    public void on() {
        System.out.println("打開客廳燈");
    }

    @Override
    public void off() {
        System.out.println("關(guān)閉客廳燈");
    }
}
public class HallLight implements Light {
    @Override
    public void on() {
        System.out.println("打開走廊燈");
    }

    @Override
    public void off() {
        System.out.println("關(guān)閉走廊燈");
    }
}

我們就可以在main方法調(diào)用這個總接口:

public class Main {
    public static void main(String[] args) {
        FacadeClient facadeClient = new FacadeClient();
        facadeClient.on();
        facadeClient.off();
    }
}

而在Spring Boot中使用的是SLF4J+logback框架,來進(jìn)行打印日志的。

3.4 日志級別

日志的級別由高到低分為:

  • FATAL:致命錯誤,表示必須立即處理的錯誤。
  • ERROR:錯誤信息,級別較高的錯誤信息,不影響程序正常運(yùn)行。
  • WARN:警告信息,不影響使用,需要注意的問題。
  • INFO:普通信息,用于記錄程序正常運(yùn)行時的信息,比如:系統(tǒng)啟動完成,請求處理完成等。
  • DEBUG:調(diào)試信息,需要調(diào)試時候的關(guān)鍵信息打印。
  • TRACE:追蹤信息,一般不使用。

Spring Boot默認(rèn)的打印日志的級別是INFO級別。

我們可以調(diào)用對應(yīng)的方法來打印不同級別的日志:

package com.sias.log.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/log")
@RestController
public class LogController {
    //生成一個日志對象
    private Logger logger = LoggerFactory.getLogger(LogController.class);

    @RequestMapping("/print")
    public String print() {
        //普通輸出打印日志
        System.out.println("打印日志");
        //使用info方法打印日志
        logger.info("打印日志");
        
        logger.error("error");
        logger.warn("warn");
        logger.info("info");
        logger.debug("gebug");
        logger.trace("trace");
        return "打印日志";
    }
}

輸出結(jié)果:

這里fatal級別日志就沒有對應(yīng)的方法,如果真發(fā)生嚴(yán)重錯誤就不需要靠日志來進(jìn)行提醒了。

這里控制臺只打印到info,因?yàn)槟J(rèn)是info及以上的日志才會打印。

3.5 日志配置

配置日志級別

我們可以在配置文件里面修改日志的級別:

我們還可以設(shè)置某個具體的包下面的代碼的打印日志的級別:

這里就是在具體某個包下打印的日志是debug級別的。

logging:
  level:
    root: info
    com:
      sias:
        log:
          controller: debug

日志的持久化

我們可以把打印的日志保存下來,通過設(shè)置配置文件將日志保存在文件里面:

logging:
  file:
    name: log.log

打印結(jié)果存儲在log.log文件里面:

這里name還可以設(shè)置目錄:

logging:
  file:
    name: dee/log.log

還有一個path屬性設(shè)置路徑:

logging:
  file:
    path: pa/log

使用這個屬性只能設(shè)置路徑,文件名字是固定的spring.log

如果path和name兩個屬性同時存在,此時就會使用name屬性設(shè)置的值。

日志的分割

我們在存儲日志時候,默認(rèn)情況下當(dāng)一個文件大小超過10MB,此時就會分割,存儲到一個新的文件里面,我們也可以設(shè)置這個分頁的閾值:

logging:
  level:
    root: debug
  file:
    name: ff/log.log
  logback:
    rollingpolicy:
      max-file-size: 1KB

默認(rèn)分開后的文件是個壓縮文件,我們也可以通過配置去修改分開后的文件名和類型:

logging:
  level:
    root: debug
  file:
    name: ff/log.log
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

日志格式的修改

我們可以修改控制臺的日志格式和日志文件中的日志格式:

  • %clr(表達(dá)式){yanse} 設(shè)置輸入日志的顏色。
  • %d{${時間格式}} 日期和時間--精確到毫秒。
  • %5p 顯示日志級別
  • %t 線程名 %c 類的全限定名  %M method
  • %L 行號 %thread 線程名稱 %m/%msg 顯示輸出消息 %n換行符
  • %5 如果字符串長度小于5,右邊用空格填充,%-5字符串長度小于5,左邊用空格填充。
  • %.15字符串長度大于15,截取多余字符。
  • %15.15字符串長度小于15,右邊用空格填充,字符串長度大于15,截取多余字符。

我們可以看到默認(rèn)日志設(shè)置了顏色,但是控制臺顯示的都是黑色,這里需要修改設(shè)置:

按照下面步驟操作:

最后點(diǎn)擊OK,就好了。

我們就可以使用上面的兩個屬性來修改格式:

logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
    file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'

此時打印的日志格式如下:

3.6 使用注解@Slf4j注解

我們在使用@Slf4j注解時候,需要添加下面的依賴:

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>

我們通過上面發(fā)現(xiàn),我們打印日志時候,需要先創(chuàng)建一個打印日志的對象,還要填入類對象的參數(shù),這個過程就可以使用@Slf4j注解來解決。

原來的代碼:

@RequestMapping("/log")
@RestController
public class LogController {
    //生成一個日志對象
    private Logger logger = LoggerFactory.getLogger(LogController.class);

    @RequestMapping("/print")
    public String print() {
        //普通輸出打印日志
        System.out.println("打印日志");
        //使用info方法打印日志
        logger.info("打印日志");

        logger.error("error");
        logger.warn("warn");
        logger.info("info");
        logger.debug("gebug");
        logger.trace("trace");
        return "打印日志";
    }
}

修改后的代碼:

此時使用@Slf4j注解就會生成一個log的注解對象,對應(yīng)上面的logger對象,可以打印日志。

@Slf4j
@RequestMapping("/log2")
@RestController
public class LogController2 {
    @RequestMapping("/print")
    public String print() {
        log.error("error");
        log.warn("warn");
        log.info("info");
        log.debug("gebug");
        log.trace("trace");
        return "打印日志";
    }
}

總結(jié)

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

相關(guān)文章

  • Java+Springboot搭建一個在線網(wǎng)盤文件分享系統(tǒng)

    Java+Springboot搭建一個在線網(wǎng)盤文件分享系統(tǒng)

    本主要介紹了通過springboot+freemark+jpa+MySQL實(shí)現(xiàn)的在線網(wǎng)盤文件分享系統(tǒng),其功能跟百度網(wǎng)盤非常類似,可以實(shí)現(xiàn)文件的上傳、移動、復(fù)制、下載等,需要的可以參考一下
    2021-11-11
  • Java?RabbitMQ消息隊列詳解常見問題

    Java?RabbitMQ消息隊列詳解常見問題

    消息隊列是最古老的中間件之一,從系統(tǒng)之間有通信需求開始,就自然產(chǎn)生了消息隊列。本文告訴什么是消息隊列,為什么需要消息隊列,常見的消息隊列有哪些,RabbitMQ的部署和使用
    2022-07-07
  • Spring為何要用三級緩存來解決循環(huán)依賴問題

    Spring為何要用三級緩存來解決循環(huán)依賴問題

    這篇文章主要給大家介紹了關(guān)于Spring為何要用三級緩存來解決循環(huán)依賴問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • RestTemplate使用不當(dāng)引發(fā)的問題及解決

    RestTemplate使用不當(dāng)引發(fā)的問題及解決

    這篇文章主要介紹了RestTemplate使用不當(dāng)引發(fā)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot Devtools實(shí)現(xiàn)項目熱部署的方法示例

    SpringBoot Devtools實(shí)現(xiàn)項目熱部署的方法示例

    這篇文章主要介紹了SpringBoot Devtools實(shí)現(xiàn)項目熱部署的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • Event?Sourcing事件溯源模式優(yōu)化業(yè)務(wù)系統(tǒng)

    Event?Sourcing事件溯源模式優(yōu)化業(yè)務(wù)系統(tǒng)

    這篇文章主要為大家介紹了Event?Sourcing事件溯源模式優(yōu)化業(yè)務(wù)系統(tǒng)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • java各種流的常見使用方法及示例

    java各種流的常見使用方法及示例

    在java中所有數(shù)據(jù)都是使用流讀寫的,流是一組有序的數(shù)據(jù)序列,將數(shù)據(jù)從一個地方帶到另一個地方,這篇文章主要介紹了java各種流的常見使用方法及示例的相關(guān)資料,需要的朋友可以參考下
    2026-03-03
  • 使用SpringBoot+Prometheus+Grafana實(shí)現(xiàn)可視化監(jiān)控

    使用SpringBoot+Prometheus+Grafana實(shí)現(xiàn)可視化監(jiān)控

    本文主要給大家介紹了如何使用Spring?actuator+監(jiān)控組件prometheus+數(shù)據(jù)可視化組件grafana來實(shí)現(xiàn)對Spring?Boot應(yīng)用的可視化監(jiān)控,文中有詳細(xì)的代碼供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2024-02-02
  • RabbitMQ高級特性之死信隊列深入解析

    RabbitMQ高級特性之死信隊列深入解析

    死信隊列(DeadLetterQueue, DLQ)是存儲那些無法被正常消費(fèi)或處理的消息的特殊隊列,應(yīng)用場景包括消息重試、消息丟棄和日志收集,本文給大家介紹RabbitMQ高級特性之死信隊列的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • Java三大結(jié)構(gòu)解析之順序、選擇、循環(huán)詳解

    Java三大結(jié)構(gòu)解析之順序、選擇、循環(huán)詳解

    Java中的for循環(huán)是一種迭代控制結(jié)構(gòu),通過初始化、條件判斷和迭代更新三個步驟,實(shí)現(xiàn)對代碼塊的重復(fù)執(zhí)行,這篇文章主要介紹了Java三大結(jié)構(gòu)解析之順序、選擇、循環(huán)的相關(guān)資料,需要的朋友可以參考下
    2025-11-11

最新評論

印江| 来宾市| 蒙城县| 绥棱县| 鹤峰县| 兴业县| 南皮县| 喀什市| 隆子县| 海盐县| 麦盖提县| 时尚| 宁强县| 西丰县| 都江堰市| 阜新市| 醴陵市| 江门市| 军事| 女性| 盐津县| 溧阳市| 黄梅县| 钦州市| 平遥县| 安化县| 乌什县| 金溪县| 万山特区| 门源| 开鲁县| 恩施市| 沈阳市| 玉门市| 瑞昌市| 涟水县| 旬邑县| 台山市| 疏勒县| 乾安县| 东乡县|