springboot日志輸出到文件


來源於  https://blog.csdn.net/lchq1995/article/details/80080642

今天來談一談日志,主要是說一說springboot的日志,因為最近在學習springboot。首先在寫代碼的時候,要養成記日志的習慣,這點真的很重要,因為之前吃了很多虧。過去我對日志很不在意,該有的日志沒有,不該有的日志卻隨意輸出。新換的工作,上司對日志有嚴格的要求,也就慢慢開始注意了。

一般而言,一個接口或者說一段程序,其入口要有日志,記錄傳入的數據是什么;部分重要的處理邏輯要有日志輸出;程序出口也要有日志,記錄其最終的處理結果。這樣在解決生產上的問題時,可以很快的定位問題的位置,是傳入數據的問題還是我們代碼邏輯寫錯了,總比憑空想象的好,要相信計算機,日志是不會騙人的。

還有一點,在生產上嚴禁使用System.out輸出,性能太低,原因是System.out輸出會導致線程等待(同步),而使用Logger輸出線程不等待日志的輸出(異步),而繼續執行。

接下來看一看springboot的日志配置,說一下把日志記錄到文件中的配置方式。

工具/原料

  • springboot

  • 日志

方法/步驟

  1. springboot推薦的日志類庫是slf4j、日志系統為logback,確實我回頭一看項目中使用的都是slf4j,說明這個東西確實有他的優點。

    上文中也說了一點,slf4j有個接口叫Logger,提供了豐富的日志輸出方法,包含了所有日志級別的輸出。使用方式也是特別的簡單,用slf4j的工廠類獲取一個logger ,然后就可以輸出日志了,默認情況下,日志只會輸出到控制台。

  2. 通過在application.properties文件中配置logging.file、logging.path可以控制日志文件的輸出路徑和文件名。

    不過有些細節需要注意,否則配置不生效,我測試了幾種情況。

  3. 如果,兩者都配置了:logging.file=myLog.log、logging.path=D:/data/mylog,注意windos的路徑(后面配置文件中也是/),此時並不會在d盤下生成日志文件,只會在項目的根目錄下創建一個myLog.log的文件(workspace中,此項目的根目錄)。

    其原因是,沒有logback-spring.xml配置文件,系統只認識logging.file,不認識logging.path。

  4. 所以要配置logback-spring.xml,spring boot會默認加載此文件,為什么不配置logback.xml,因為logback.xml會先application.properties加載,而logback-spring.xml會后於application.properties加載,這樣我們在application.properties文中設置日志文件名稱和文件路徑才能生效。

  5. 且看logback-spring.xml的配置詳情。注意${LOG_PATH}和${LOG_FILE}分別是獲取配置文件中的路徑和文件名稱,必須使用這兩個全局的配置去獲取。然后重啟項目,發現在配置的目錄下,有了相應的日志文件。

     

  6. 日志文件的配置結構:

    (1)FILE_LOG_PATTERN:日志輸出格式變量,在控制台輸出和文件中輸出的append中都引用了此變量。(2)consoleLog:定義一個控制台的appender(3)fileLog:定義一個日志文件的appender,這就是文件輸出的詳細配置,<File>是日志文件的輸出地址:必須要為${LOG_PATH}/${LOG_FILE},這樣我們在application.properties中的配置才有效。level標簽:如果我們設置了level為info,只會輸出info的日志信息,其他日志級別的日志就會過濾掉,建議不配置level屬性。

    (4)logger:其name就是項目中對應的包路徑,appender-ref是appender的引用,在本配置文件中,意思就是com.example.xyx.MySpringBootTest包下文件的日志,按照fileLog的配置去輸出,即按照FILE_LOG_PATTERN的格式,輸出到D:/data/mylog/myLog.log文件中。

    標簽level="debug"是設置日志級別:作用是debug級別及其以上級別的日志會輸出(debug、info、warn、error,,,),注意此處的level是一個下線,比其日志級別高的日志信息也會輸出,很重要。

    additivity="false"是配置此logger是否提交給其他的logger或者root節點,如果true,則root也會執行或者其他的可以攔截到的logger節點,且logger的level優先級高;否則不會執行,在本配置文件中即控制台不會輸出com.example.xyx.MySpringBootTest包下文件的日志。

    (5)root:根節點,在logback-spring.xml中只引用了控制台日志輸出配置,不會輸出到文件,如果想輸出到文件,可以寫再寫一個引用。level=info,在控制台輸出into級別及其以上級別的日志。會攔截所有包下的日志,但是其輸出會受到logger的影響,即注意logger中的additivity屬性,如果為false,com.example.xyx.MySpringBootTest包下的日志不會輸出到控制台。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM