面試官:Spring Boot中日誌輸出有關注過嗎?
小小白:有研究過。
面試官:使用Starters方式快速構建專案,那麼預設使用的日誌工具是什麼?
小小白:如果專案使用Starters,則預設使用Logback作為日誌記錄工具,並且預設配置下日誌只會在控制檯輸出。
面試官:預設情況下,日誌輸出哪些級別的日誌資訊?
小小白:預設配置下,日誌將記錄ERROR、WARN和INFO級別的日誌資訊,當然你也可以開啟除錯模式記錄更多資訊。
面試官:那如何開啟除錯模式?
小小白:新增命令列引數和修改屬性配置兩種方式。命令列啟動應用時指定開啟除錯模式,例如執行命令:java -jar test.jar --debug;在application.properties中配置debug=true,或在application.yml中配置debug:true,則開啟除錯模式。
面試官:那是不是開啟除錯模式後,日誌只記錄DEBUG級別的日誌?
小小白:不是,開啟除錯模式並不是改變日誌記錄的級別為DEBUG,而且日誌輸出更多級別的日誌資訊。
面試官:預設配置下Spring Boot應用啟動時,日誌會輸出一個banner圖案,輸出的內容可以修改嗎?
小小白:可以的,在src/main/resource目錄下新建一個banner.txt文字,裡面寫入自己想修改的內容即可。
面試官:那要是想關閉這個banner的輸出,如果操作?
小小白:有兩種方法:修改預設配置和硬編碼。在application.properties或application.yml中新增spring.main.banner-mode=off;在應用啟動類中,通過如下程式碼關閉。
SpringApplication application = new SpringApplication(SpringbootApplication.class);
application.setBannerMode(Banner.Mode.OFF);
application.run(args);
面試官:日常的開發及未來的投產都會將日誌輸出到指定檔案,這個如何配置?
小小白:在application.properties中配置logging.file屬性,用於指定日誌檔案的位置(可以是相對位置或絕對位置)和名稱,它將會把日誌資訊記錄到對應位置下的日誌檔案中,例如配置logging.file=app.log,將會在當前classpath下建立app.log,並將日誌資訊記錄到這個檔案中。這個日誌檔案配置同樣可以配置在application.yml中。
也可以在application.properties中配置logging.path屬性,用於指定日誌檔案的位置,可以是相對位置或絕對位置 ,同時生成的日誌檔名稱固定為spring.log,例如配置logging.path=/logs,將會在根目錄下建立logs目錄,並生成spring.log日誌檔案,日誌資訊記錄到這個檔案中。這個日誌檔案位置配置同樣可以配置在application.yml中。
面試官:如果在配置檔案中logging.file和logging.path都配置了屬性值,會是什麼效果?
小小白:如果同時配置了logging.file和logging.path,最終生效的只是logging.file。
面試官:一般在生產環境都會配置日誌檔案達到一定大小會自動歸檔,Spring Boot有預設規則嗎?
小小白:日誌資訊輸出到檔案後,預設情況下使用Logback作為日誌記錄工具,會記錄ERROR、WARN和INFO級別的日誌資訊,並且日誌檔案大小超過10MB後,日誌檔案將會被打包成.gz的壓縮檔案,且壓縮檔名稱會排序累加,例如app.log.2020-04-20.0.gz、app.log.2020-04-20.1.gz。
面試官:這個預設的10MB太小了,如何修改?
小小白:通過在application.properties中配置logging.file.max-size,它的屬性值需要帶單位,可以是KB、MB或GB,單位大小寫不敏感都可以使用,例如配置最大大小為100MB,則logging.file.max-size=100MB,需要注意的是這個屬性配置僅對預設Logback生效。
面試官:要修改日誌輸出的級別,如何操作?
小小白:修改日誌記錄的級別可以在application.properties或application.yml中配置,新增logging.level.<logger-name>=<level>,其中level可以是TRACE、DEBUG、INFO、WARN、ERROR、FATAL或OFF,對於root級的配置可以使用logging.level.root,例如如下一些配置示例:
logging.level.root=INFO
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
面試官:Spring Boot是不是隻支援Logback?
小小白:Spring Boot 2.0版本支援Java Util Logging、Log4J2和Logback日誌工具,預設使用Logback,如果不想使用預設日誌工具,可以自定義修改。
面試官:那如果專案中要使用Log4J2作為日誌工具,如何實現?
小小白:第一步,將Log4J2的相關jar包新增到classpath目錄下。可以使用spring-boot-starter-log4j2來新增jar,不過需要注意的是spring-boot-starter和spring-boot-starter-web會包含預設的Logback的jar,所以新增依賴時需要排除掉這些包含的jar。第二步,在classpath目錄下建立log4j2-spring.xml或log4j2.xml日誌配置檔案,Spring Boot推薦使用帶有-spring的檔名作為日誌配置檔名。如果不想在classpath目錄下建立log4j2-spring.xml或log4j2.xml日誌配置檔案,還可以通過在application.properties中配置logging.config屬性來指定日誌配置檔案。
面試官:有時我們想不同的環境有不同的日誌輸出配置,這個可以通過配置實現嗎?
小小白:使用Logback作為日誌工具,Spring Boot對它支援了多環境切換。可以在logback-spring.xml中使用<springProfile>標籤來區分日誌配置對哪個環境生效。
往期推薦: