首頁  >  文章  >  Java  >  如何掌握SpringBoot日誌文件

如何掌握SpringBoot日誌文件

WBOY
WBOY轉載
2023-05-12 11:46:051206瀏覽

    SpringBoot日誌檔案

    1. 日誌有什麼用

    日誌是程式的重要組成部分,想像一下,如果程式報錯了,不讓你打開控制台看日誌,那麼你能找到報錯的原因嗎。

    日誌對我們來說,最主要的用途就是排除和定位問題。除了發現與定位問題之外,我們還可以透過日誌實現以下功能:

    • 記錄使用者登入日誌,方便分析使用者是正常登錄,還是惡意破解使用者

    • #記錄系統的操作日誌,方便資料復原與定位操作人

    • #記錄程式的執行時間,方便日後最佳化程式提供資料支援

    #2. 日誌怎麼用

    Spring Boot專案在啟動的時候預設就會有日誌的輸出,如下圖:

    如何掌握SpringBoot日誌文件

    透過上述資訊我們可以發現:

    • Spring Boot內建了日誌框架

    • 預設情況下,輸出的日誌並不是開發者定義和列印的,那麼開發者怎麼在程式中定義列印日誌?

    • 日誌預設是印在控制台上,而控制台的日誌是不能被儲存的, 如何將日誌永久的儲存下來?

    3. 自訂日誌列印

    #開發者自訂列印日誌的實作步驟:

    • 在程式中得到日誌

    • 使用日誌物件的相關語法輸出要列印的內容

    #3.1 在程式中得到日誌物件
    private static final Logger log = LoggerFactory.getLogger(UserController.class);

    日誌工廠需要將每個類別的類型傳進去,這樣我們才能知道日誌的歸屬類,才能更方便更直觀的定位到問題

    注意:logger物件屬於org.slf4j套件下的,不要導錯了

    如何掌握SpringBoot日誌文件

    3.2 使用日誌物件列印日誌

    #日誌物件的列印方法有很多種,我們可以使用info方法來輸出日誌,

    @Controller
    @ResponseBody
    public class UserController {
        private static final Logger log = LoggerFactory.getLogger(UserController.class);
        @RequestMapping("/sayhi")
        public void sayHi() {
            log.trace("trace");
            log.debug("debug");
            log.info("info");
            log.warn("warn");
            log.error("error");
        }
    }

    如何掌握SpringBoot日誌文件

    4. 日誌等級

    4.1 日誌等級有什麼用?
    • 日誌等級可以幫你篩選出重要的訊息,例如設定日誌等級為error,那麼就可以只看到程式的報錯日誌了,對於普通的偵錯日誌和業務日誌就可以忽略了。從而節省開發者篩選的時間

    • 日誌等級可以控制不同環境下,一個程式是否需要列印日誌,如開發環境我們需要很詳細的信息,而生產環境為了保持效能和安全性就會輸出少量的日誌,而透過日誌等級可以實現此類需求

    4.2 日誌等級的分類與使用

    日誌等級分為:

    • trace: 微量,少許的意思,等級最低

    • #debug:需要偵錯時候的關鍵資訊列印

    • info:普通的列印資訊(預設日誌等級)

    • warn:警告:不影響使用,但需要注意的問題

    • #error:錯誤訊息,等級較高的錯誤日誌訊息

    • fatal:致命的,因為程式碼異常導致程式退出執行的事件

    #日誌層級的順序:

    如何掌握SpringBoot日誌文件

    越往上,接收到的資訊就越少,如設定了warn就只能接收到warn及其上面的層級

    日誌等級設定

    logging:
      level:
        root: error

    預設日誌輸出等級

    清除掉設定檔當中的日誌設置,觀察控制台輸出的日誌等級

    得到結論,日誌輸出等級預設是info

    當存在局部日誌等級和全域日誌等級設置,那麼當存取局部日誌時,使用的是局部日誌級別。也就是局部日誌優先權高於全域日誌的優先權

    5. 日誌持久化

    以上的日誌都是輸出在控制台上,然而生產環境上咱們需要將日誌保存下來,以便出現問題之後追溯問題,把日誌保存下來的過程叫做持久化

    想要將日至持久化,只需要在設定檔中指定日誌的儲存目錄或指定日誌儲存檔案名,Spring Boot就會將控制台的日誌寫到對應的目錄或檔案下

    設定日誌檔案的儲存路徑:

    logging:
      file:
        path: D:\rizhi

    儲存的路徑,其中包含轉義字符方面的設定我們可以使用這個/來當作分割符。

    如果堅持使用Windows下的分割符,我們需要使用\轉義字元來轉義一下

    配置日志文件的文件名:

    logging:
      file:
        name: D:/rizhi/logger/spring.log

    6. 更简单的日志输出–lombok

    每次使用LoggerFactory.getLogger很繁琐,且每个类都添加一遍,也很麻烦。这里的lombok是一种更好的日志输出方式

    • 添加lombok框架支持

    • 使用@slf4j注解输出日志

    6.1 添加 lombok 依赖

    首先要安装一个插件:

    如何掌握SpringBoot日誌文件

    然后再pom.xml页面右键、

    如何掌握SpringBoot日誌文件

    如何掌握SpringBoot日誌文件

    如何掌握SpringBoot日誌文件

    最后重新添加依赖就可以了

    如何掌握SpringBoot日誌文件

    6.2 输出日志

    使用@Slf4j注解,在程序中使用log对象即可输入日志并且只能使用log对象才能输出,这是lombok提供的对象名

    6.3 lombok原理解释

    lombok 能够打印⽇志的密码就在 target ⽬录⾥⾯,target 为项⽬最终执⾏的代码,查看 target ⽬录我们可以发现:

    如何掌握SpringBoot日誌文件

    这里的@Slf4j注解变成了一个对象。

    下面是java程序的运行原理:

    如何掌握SpringBoot日誌文件

    6.4 lombok更多注解说明

    基本注解

    注解 作用
    @Getter 自动添加get方法
    @Setter 自动添加set方法
    @ToString 自动添加toString方法
    @EqualsAndHashCode 自动添加equals和hasCode方法
    @NoArgsConstructor 自动添加无参构造方法
    @AllArgsConstructor 自动添加全属性构造方法,顺序按照属性的定义顺序
    @NonNull 属性不能为null
    @RequiredArgsConstructor 自动添加必须属性的构造方法,final + @NonNull的属性为需

    组合注解:

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

    日志注解

    注解 作用
    @Slf4j 添加一个名为log的对象

    以上是如何掌握SpringBoot日誌文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除