面試官:SpringBoot中關於日誌工具的使用,我想問你幾個常見問題

公衆號[JavaQ]原創,專注分享Java基礎原理分析、實戰技術、微服務架構、分佈式系統構建,誠邀點贊關注!

面試官: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>標籤來區分日誌配置對哪個環境生效。

往期推薦

面試被問爲什麼使用Spring Boot?答案好像沒那麼簡單面試官:Spring框架內置了哪些可擴展接口,咱們一個一個聊

Spring聲明式事務處理的實現原理,來自面試官的窮追拷問

Spring MVC相關面試題就是無底洞,反正我是怕了

說實話,面試這麼問Spring框架的問題,我快扛不住了

沒使用加號拼接字符串,面試官竟然問我爲什麼

面試官一步一步的套路你,爲什麼SimpleDateFormat不是線程安全的

都說ThreadLocal被面試官問爛了,可爲什麼面試官還是喜歡繼續問

Java註解是如何玩轉的,面試官和我聊了半個小時

如何去除代碼中的多次if而引發的一連串面試問題

String引發的提問,我差點跪了

就寫了一行代碼,被問了這麼多問題

面試官:JVM對鎖進行了優化,都優化了啥?

synchronized連環問

支持原創,我點【在看 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章