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

SpringBoot日志文件的實(shí)現(xiàn)示例

 更新時(shí)間:2023年08月09日 08:34:54   作者:三春去后諸芳盡  
日志是程序中的重要組成部分,使用日志可以快速的發(fā)現(xiàn)和定位問(wèn)題,本文主要介紹了SpringBoot日志文件的實(shí)現(xiàn)示例,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、日志的作用

日志是程序的重要組成部分,想象一下,如果程序報(bào)錯(cuò)了,不讓你打開(kāi)控制臺(tái)看日志,那么你能找到報(bào)錯(cuò)的原因嗎

答案是否定的,寫(xiě)程序不是買(mǎi)彩票,不能完全靠猜,因此日志對(duì)于我們來(lái)說(shuō),最主要的用途就是排除和定位問(wèn)題

除了發(fā)現(xiàn)和定位問(wèn)題之外,我們還可以通過(guò)日志實(shí)現(xiàn)以下功能:

  • 記錄用戶(hù)登錄日志,方便分析用戶(hù)是正常登錄還是惡意破解用戶(hù)。
  • 記錄系統(tǒng)的操作日志,方便數(shù)據(jù)恢復(fù)和定位操作人。
  • 記錄程序的執(zhí)行時(shí)間,方便為以后優(yōu)化程序提供數(shù)據(jù)支持。

以上這些都是日志提供的非常實(shí)用的功能

日志真實(shí)使用案例:

關(guān)鍵節(jié)點(diǎn)上的關(guān)鍵數(shù)據(jù)日志記錄舉例:例如教務(wù)系統(tǒng),在注冊(cè)時(shí)候不止要在教務(wù)系統(tǒng)添加一條用戶(hù)記錄,同時(shí)也會(huì)給論壇添加一條一模一樣的用戶(hù)記錄,這樣做的目的是為了實(shí)現(xiàn)一次注冊(cè),多處使用的目的。不需要用戶(hù)在兩邊系統(tǒng)注冊(cè)了,等于在程序中以極低的成本實(shí)現(xiàn)的用戶(hù)數(shù)據(jù)的同步,但這樣設(shè)計(jì)有一個(gè)致命的問(wèn)題,用戶(hù)在教務(wù)系統(tǒng)注冊(cè)信息的時(shí)候,如果論壇掛了,那么用戶(hù)的注冊(cè)行為就會(huì)失???因?yàn)橛脩?hù)在注冊(cè)的時(shí)候需要同步注冊(cè)到論壇系統(tǒng),但論壇現(xiàn)在掛了,這個(gè)時(shí)候怎么辦呢?

最簡(jiǎn)單的解決方案,教務(wù)系統(tǒng)在注冊(cè)的時(shí)候,不管論壇是否注冊(cè)成功,都給用戶(hù)返回成功,那這個(gè)時(shí)候如果論壇注冊(cè)失敗了怎么辦?非常簡(jiǎn)單,如果注冊(cè)失敗了,記錄一下日志,等論壇恢復(fù)正常之后,把日志給論壇的管理人員,讓他?動(dòng)將注冊(cè)失敗的用戶(hù)同步到論壇系統(tǒng),這樣就最低成本的解決了問(wèn)題。這就是日志的重要作用

二、日志怎么用

Spring Boot 項(xiàng)目在啟動(dòng)的時(shí)候默認(rèn)就有日志輸出

以上內(nèi)容就是 Spring Boot 輸出的控制臺(tái)日志信息。

通過(guò)上述日志信息我們能發(fā)現(xiàn)以下 3 個(gè)問(wèn)題:

Spring Boot 內(nèi)置了日志框架(不然也輸出不了日志)。默認(rèn)情況下,輸出的日志并非是開(kāi)發(fā)者定義和打印的,那開(kāi)發(fā)者怎么在程序中自定義打印日志呢?日志默認(rèn)是打印在控制臺(tái)上的,而控制臺(tái)的日志是不能被保存的,那么怎么把日志永久的保存下來(lái)呢 三、自定義日志打印 1、使用日志對(duì)象打印日志

Spring Boot自定義日志的打?。?/strong>

1). 在一個(gè)類(lèi)中先獲取到打印日志對(duì)象(日志框架提供的日志對(duì)象,而日志框架默認(rèn)已經(jīng)集成到Spring Boot 里了);

  • 得到日志對(duì)象Logger ->Logger 對(duì)象是屬于 org.slf4j 包下的,不要導(dǎo)入錯(cuò)包
  • 因?yàn)?Spring Boot 中內(nèi)置了日志框架 Slf4j,所以咱們可以直接在程序中調(diào)用 slf4j 來(lái)輸出日志

2). 使用日志對(duì)象提供的方法實(shí)現(xiàn)日志的打印

  • 在程序中獲取日志對(duì)象需要使用日志工廠(chǎng) LoggerFactory
  • 日志工廠(chǎng)需要將每個(gè)類(lèi)的類(lèi)型傳遞進(jìn)去,這樣我們才知道日志的歸屬類(lèi),才能更方便、更直觀(guān)的定位到問(wèn)題類(lèi)
@Controller
@ResponseBody // 非靜態(tài)數(shù)據(jù)
public class UserController {
    // 1、先得到日志對(duì)象——來(lái)自于slf4j
    private final static Logger log =
            LoggerFactory.getLogger(UserController.class); // 設(shè)置當(dāng)前類(lèi)的類(lèi)型
    @RequestMapping("/sayhi")
    public void sayHi() {
        log.trace("I'm trace");
        log.debug("I'm debug");
        log.info("I'm info");
        log.warn("I'm warn");
        log.error("I'm error");
    }
}

訪(fǎng)問(wèn) http://localhost:8080/sayhi,打印日志效果展示:

默認(rèn)日志輸出級(jí)別:

當(dāng)前未配置文件中的日志設(shè)置,觀(guān)察控制臺(tái)輸入的日志級(jí)別,得到以下結(jié)論,日志的輸出級(jí)別,默認(rèn)是 info

常?的日志框架說(shuō)明(了解)

2、日志格式說(shuō)明

四、日志級(jí)別與分類(lèi)

1、什么是日志級(jí)別

日志的級(jí)別就是為了篩選符合目標(biāo)的日志信息的。試想一下這樣的場(chǎng)景,假設(shè)你一家 2 萬(wàn)人公司的老板,那么每人員工的日常工作和瑣碎的信息都要反饋給你嗎?一定不會(huì),因?yàn)槟愀緵](méi)有那么多經(jīng)歷。于是就有了組織架構(gòu),而組織架構(gòu)就會(huì)分級(jí),有很多的級(jí)別設(shè)置,如下圖所示

有了組織架構(gòu)之后,就可以逐級(jí)別匯報(bào)消息了,例如:組員匯報(bào)給組長(zhǎng);組長(zhǎng)匯報(bào)給研發(fā)一組;研發(fā)一組匯報(bào)給 Java 研發(fā),等等依次進(jìn)行匯報(bào)。

而日志分級(jí)大概的道理也是一樣的,有了日志級(jí)別之后就可以過(guò)濾自已想看到的信息了,比如設(shè)置日志級(jí)別為 error,那么就可以只看程序的報(bào)錯(cuò)日志了,對(duì)于普通的調(diào)試日志和業(yè)務(wù)日志就可以忽略了,從而節(jié)省開(kāi)發(fā)者的信息篩選時(shí)間

2、日志級(jí)別分類(lèi)

  • trace:微量,少許的意思,級(jí)別最低
  • info:普通的打印信息(默認(rèn)級(jí)別)
  • debug:需要調(diào)試時(shí)候的關(guān)鍵信息打印
  • warn:警告,不影響使用,但需要注意的問(wèn)題
  • error:錯(cuò)誤信息,級(jí)別較高的錯(cuò)誤日志信息
  • fatal:致命的,因?yàn)榇a異常導(dǎo)致程序退出執(zhí)行的事件 (系統(tǒng)輸出的日志,不能自定義打印)

日志級(jí)別的順序:

越往上接收到的消息就越少

3、日志使用

日志級(jí)別配置只需要在配置文件中設(shè)置 “logging.level” 配置項(xiàng)即可,配置根路徑的日志級(jí)別,application.properties:

# 設(shè)置全局的日志級(jí)別
logging.level.root=trace

# 設(shè)置局部的日志級(jí)別
logging.level.com.example.springboot_logger=warn

注意: 當(dāng)存在局部日志級(jí)別 和 全局的日志級(jí)別設(shè)置時(shí),當(dāng)訪(fǎng)問(wèn)局部日志時(shí),使用的是局部日志級(jí)別,也就是局部日志級(jí)別優(yōu)先級(jí) > 全局的日志級(jí)別

五、日志持久化

# 設(shè)置全局的日志級(jí)別
logging.level.root=info
# 設(shè)置局部的日志級(jí)別
logging.level.com.example.springboot_logger.controller=trace

以上的日志都是輸出在控制臺(tái)上的,然而在生產(chǎn)環(huán)境上咱們需要將日志保存下來(lái),以便出現(xiàn)問(wèn)題之后追溯問(wèn)題,把日志保存下來(lái)的過(guò)程就叫做持久化

**1). 在配置文件中指定日志的存儲(chǔ)目錄,**當(dāng)設(shè)置了保存路徑之后,Spring Boot 就會(huì)將控制臺(tái)的日志寫(xiě)到相應(yīng)的目錄或文件下了

**2). 在配置文件中設(shè)置日志保存的名稱(chēng),**日志會(huì)自動(dòng)進(jìn)行持久化

1、配置日志文件的保存路徑

錯(cuò)誤方式: logging.file.path=F:\Download ——SpringBoot會(huì)認(rèn)為是一個(gè)特殊的字符,而非目錄,所以日志持久化不會(huì)成功

——正確設(shè)置日志路徑的方式 1:

# 配置日志文件的保存路徑
logging.file.path=F:/Download

生成一個(gè) spring.log 文件,vscode 打開(kāi):

——正確設(shè)置日志路徑的方式 2:

# 配置日志文件的保存路徑
# logging.file.path=F:/Download
logging.file.path=F:\\Download

刪除此文件,重新運(yùn)行,同樣會(huì)生成 spring.log 文件

2、配置日志文件的文件名

# 設(shè)置日志文件的保存名稱(chēng)
# 1)
# logging.file.name=spring_boot.log
# 2) 指定目錄
logging.file.name=F:\\Download\\spring_boot.log

生成一個(gè) spring_boot.log 文件

日志數(shù)據(jù)默認(rèn)是追加而不是覆蓋,當(dāng)日志數(shù)據(jù)變多,也不需要設(shè)置日志大小,當(dāng)用滿(mǎn)時(shí),會(huì)自動(dòng)以數(shù)字 123… 分割文件

綜合練習(xí):將 controller 包下 error 級(jí)別以上的日志保存到 log_all.log 下,將 service 下 warn級(jí)別以上的日志保存到 log_all.log 下

實(shí)現(xiàn)的關(guān)鍵步驟:

  • 不同包定義不同的日志級(jí)別。
  • 使用日志對(duì)象打印所有類(lèi)型的日志。
  • 設(shè)置固定的日志保存文件名

六、更簡(jiǎn)單的日志輸出—lombok

1、lombok

每次都使用 LoggerFactory.getLogger(xxx.class) 很繁瑣,且每個(gè)類(lèi)都添加一遍,也很麻煩,這里講一種更好用的日志輸出方式,使用 lombok 來(lái)更簡(jiǎn)單的輸出

1). 添加 lombok 框架支持

——添加插件 EditStarters,

——使用 EditStarters 添加 lombok

2). 使用 @slf4j 注解輸出日志

@Controller // 直接和前端交互,不能用 @Service
@ResponseBody
@Slf4j // 替代了 LoggerFactory.getLogger 操作
public class UserService {
    @RequestMapping("/sayhi2")
    public void sayHi() {
        log.trace("I'm trace");
        log.debug("I'm debug");
        log.info("I'm info");
        log.warn("I'm warn");
        log.error("I'm error");
    }
}

——設(shè)置日志級(jí)別配置 application.properties:

# 設(shè)置局部的日志級(jí)別
logging.level.com.example.springboot_logger.controller=trace

——訪(fǎng)問(wèn) http://localhost:8080/sayhi2:

注意:使用 @Slf4j 注解,在程序中使用 log 對(duì)象即可輸入日志,并且只能使用 log 對(duì)象才能輸出,這是 lombok 提供的對(duì)象名

2、lombok 原理解釋

lombok 能夠打印日志的密碼就在 target 目錄里?,target 為項(xiàng)目最終執(zhí)行的代碼,查看 target 目錄如下:

Java 程序的運(yùn)行原理:

Lombok 的作用如下圖所示:

3、lombok 更多注解說(shuō)明

基本注解:

注解
@Getter動(dòng)添加 getter 法
@Setter動(dòng)添加 setter 法
@ToString動(dòng)添加 toString 法
@EqualsAndHashCode動(dòng)添加 equals 和 hashCode 法
@NoArgsConstructor動(dòng)添加參構(gòu)造法
@AllArgsConstructor動(dòng)添加全屬性構(gòu)造法,順序按照屬性的定義順序
@NonNull屬性不能為 null
@RequiredArgsConstructor動(dòng)添加必需屬性的構(gòu)造法,final + @NonNull 的 屬性為必需

組合注解:

注解作用
@Data@Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor + @NoArgsConstructor

日志注解:

注解作用
@Slf4j添加個(gè)名為 log 的志,使slf4j

總結(jié):

日志是程序中的重要組成部分,使用日志可以快速的發(fā)現(xiàn)和定位問(wèn)題,Spring Boot 內(nèi)容了日志框架,默認(rèn)情況下使用的是 info 日志級(jí)別將日志輸出到控制臺(tái)的,我們可以通過(guò) lombok 提供的 @Slf4j 注解和 log 對(duì)象快速的打印自定義日志,日志包含 6 個(gè)級(jí)別:

  • trace:微量,少許的意思,級(jí)別最低;
  • info:普通的打印信息;
  • debug:需要調(diào)試時(shí)候的關(guān)鍵信息打?。?/li>
  • warn:警告,不影響使用,但需要注意的問(wèn)題;
  • error:錯(cuò)誤信息,級(jí)別較高的錯(cuò)誤日志信息;
  • fatal:致命的,因?yàn)榇a異常導(dǎo)致程序退出執(zhí)行的事件。

日志級(jí)別依次提升,而日志界別越高,收到的日志信息也就越少,我們可以通過(guò)配置日志的保存名稱(chēng)或保存目錄來(lái)將日志永久地保存下來(lái)

到此這篇關(guān)于SpringBoot日志文件的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)SpringBoot 日志文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java+MySQL 圖書(shū)管理系統(tǒng)

    Java+MySQL 圖書(shū)管理系統(tǒng)

    這篇文章是BUFFER.pwn同學(xué)分享的基于Java與MySQL的圖書(shū)管理系統(tǒng),需要的朋友可以參考一下
    2021-04-04
  • MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作

    MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作

    這篇文章主要介紹了MybatisPlus:使用SQL保留字(關(guān)鍵字)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Android開(kāi)發(fā)Kotlin實(shí)現(xiàn)圓弧計(jì)步器示例詳解

    Android開(kāi)發(fā)Kotlin實(shí)現(xiàn)圓弧計(jì)步器示例詳解

    這篇文章主要為大家介紹了Android開(kāi)發(fā)Kotlin繪制圓弧計(jì)步器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • IDEA如何撤銷(xiāo)本地commit的代碼

    IDEA如何撤銷(xiāo)本地commit的代碼

    這篇文章主要介紹了IDEA如何撤銷(xiāo)本地commit的代碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • springboot啟動(dòng)報(bào)錯(cuò)Failed to load class [javax.servlet.Filter]的解決

    springboot啟動(dòng)報(bào)錯(cuò)Failed to load class [java

    這篇文章主要介紹了springboot啟動(dòng)報(bào)錯(cuò)Failed to load class [javax.servlet.Filter]的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-03-03
  • 詳細(xì)聊一聊JavaWeb中的Request和Response

    詳細(xì)聊一聊JavaWeb中的Request和Response

    這篇文章主要給大家介紹了關(guān)于JavaWeb中Request和Response的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-02-02
  • java 單播、廣播、組播詳解及實(shí)例代碼

    java 單播、廣播、組播詳解及實(shí)例代碼

    這篇文章主要介紹了java 單播、廣播、組播詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 如何利用Ganymed SSH-2模擬SSH操作

    如何利用Ganymed SSH-2模擬SSH操作

    這幾天看SFTP資料時(shí),無(wú)意中看到了Ganymed SSH-2,寫(xiě)了個(gè)簡(jiǎn)單demo,通過(guò),感覺(jué)挺好用的,下面就和大家分享下。需要的朋友可以過(guò)來(lái)參考參考
    2013-08-08
  • 詳談Java中Object類(lèi)中的方法以及finalize函數(shù)作用

    詳談Java中Object類(lèi)中的方法以及finalize函數(shù)作用

    下面小編就為大家?guī)?lái)一篇詳談Java中Object類(lèi)中的方法以及finalize函數(shù)作用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Java8 Stream中間操作實(shí)例解析

    Java8 Stream中間操作實(shí)例解析

    這篇文章主要介紹了Java8 Stream中間操作實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12

最新評(píng)論

全州县| 武冈市| 睢宁县| 罗甸县| 贵州省| 贡觉县| 荥经县| 平江县| 界首市| 睢宁县| 博客| 称多县| 常熟市| 客服| 黄龙县| 略阳县| 东至县| 江城| 石阡县| 明光市| 武清区| 沅江市| 二连浩特市| 崇信县| 福建省| 贵德县| 类乌齐县| 郎溪县| 江孜县| 扶余县| 邵阳市| 贵南县| 岢岚县| 革吉县| 芮城县| 惠州市| 丰宁| 黄山市| 治县。| 宁晋县| 磐安县|