Spring Boot使用Commons Logging記錄全部內部日誌,可是它將底層日誌實現打開,爲Java.Util.Logging,Log4J2和Logback提供默認配置。 在每一個案例中,loggers都預先配置,以使用控制檯輸出,同時還提供可選的文件輸出。html
默認狀況下,若是你使用「starters」,Logback將會被用於記錄日誌。還包括佔用Logback路由,以確保使用Java Util Logging、Commons logging、Log4J或SLF4J的依賴庫都能正常工做。java
SLF4J——Simple Logging Facade For Java,它是一個針對於各種Java日誌框架的統一Facade抽象。Java日誌框架衆多——經常使用的有java.util.logging
, log4j
, logback
,commons-logging
, Spring框架使用的是Jakarta Commons Logging API (JCL)。而SLF4J定義了統一的日誌抽象接口,而真正的日誌實現則是在運行時決定的——它提供了各種日誌框架的綁定。web
Logback是log4j框架的做者開發的新一代日誌框架,它效率更高、可以適應諸多的運行環境,同時自然支持SLF4J。spring
默認狀況下,Spring Boot會用Logback來記錄日誌,並用INFO級別輸出到控制檯。在運行應用程序和其餘例子時,能夠看到不少INFO級別的日誌。sql
從上圖能夠看到,日誌輸出內容元素具體以下:apache
---
標識實際日誌的開始用Logback來記錄日誌,需添加日誌依賴api
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency>
實際開發中咱們不須要直接添加該依賴,你會發現spring-boot-starter其中包含了spring-boot-starter-logging,該依賴內容就是 Spring Boot 默認的日誌框架 logback。安全
日誌級別從低到高分爲TRACE < DEBUG < INFO < WARN < ERROR < FATAL,若是設置爲WARN,則低於WARN的信息都不會輸出。Spring Boot中默認配置ERROR
、WARN
和INFO
級別的日誌輸出到控制檯。您還能夠經過啓動您的應用程序–debug標誌來啓用「調試」模式(開發的時候推薦開啓),如下兩種方式皆可:oracle
--debug
標誌,如:$ java -jar springTest.jar --debug
application.properties
中配置debug=true
,該屬性置爲true的時候,核心Loggers(包含嵌入式容器、hibernate、spring)會輸出更多內容,啓用debug模式並不會使用debug級別配置您的應用程序來記錄全部信息。或者,您能夠經過在應用程序中使用-trace標誌(或在application.properties中配置trace=true)啓動應用程序來啓用「跟蹤」模式。app
默認狀況下,Spring Boot將日誌輸出到控制檯,不會寫到日誌文件。若是要編寫除控制檯輸出以外的日誌文件,則需在application.properties中設置logging.file或logging.path屬性。
logging.file=my.log
logging.path=/var/log
默認狀況下,日誌文件的大小達到10MB時會切分一次,產生新的日誌文件,默認級別爲:ERROR、WARN、INFO
日誌系統在應用程序生命週期的早期被初始化,而且在經過@propertysource註解加載的屬性文件中不會找到這樣的日誌屬性。
日誌屬性與實際的日誌基礎結構無關。所以,特定的配置鍵(例如logback中的
logback.configurationFile
)不是由spring boot管理的。
省略...
全部支持日誌記錄的系統均可以在Spring環境中設置記錄級別(例如在application.properties中)
格式爲:’logging.level.* = LEVEL’
logging.level
:日誌級別控制前綴,*
爲包名或Logger名LEVEL
:選項TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF root日誌可使用 logging.level.root
配置,application.properties實例:
logging.level.root=WARN logging.level.org.springframework.web=DEBUG logging.level.org.hibernate=ERROR
默認狀況下,Spring boot對 Thymeleaf
INFO
消息進行了從新映射,使它們在調試級別上被記錄,這有助於減小標準日誌輸出中的噪聲。有關如何在本身的配置中應用從新映射的詳細信息,請參閱LevelRemappingAppender。
能夠經過在classpath中包含適當的庫來激活各類日誌系統,並經過在classpath根目錄提供適當的配置進行定製。或者在適當的位置提供spring 環境屬性logging.config。
還能夠強制spring boot使用特定的日誌系統經過使用 org.springframework.boot.logging.LoggingSystem
系統屬性。 該值應該是一個 LoggingSystem
實現的徹底限定類名。 您還可使用none值徹底禁用Spring boot的日誌記錄配置。
因爲日誌是在應用程序applicationContext上下文建立以前初始化的,因此不可能在Spring @configuration註解文件中控制來自@propertySource的日誌記錄。系統屬性和常規的Spring boot外部配置文件已經工做得很好。
根據不一樣的日誌系統,你能夠按以下規則組織配置文件名,就能被正確加載:
logback-spring.xml
, logback-spring.groovy
, logback.xml
, logback.groovy
log4j2-spring.xml
, log4j2.xml
logging.properties
在可能的狀況下,咱們建議您使用-spring變體來進行日誌配置( 如使用logback-spring.xml
,而不是logback.xml
)。若是使用標準配置logback.xml
,Spring沒法徹底控制日誌初始化。 Spring boot包含許多對Logback的擴展,能夠幫助高級配置,您能夠在您的logback-spring.xml文件中使用這些擴展。在標準配置logback.xml中不能使用這些擴展由於它太早被加載,固然若是必定要使用,需定義一個 logging.config
屬性。
注:這些擴展不能與Logback的配置掃描一塊兒使用。若是您嘗試這樣作,對配置文件進行更改將致使相似於如下日誌記錄之一的錯誤:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProperty], current ElementPath is [[configuration][springProperty]] ERROR in ch.qos.logback.core.joran.spi.Interpreter@4:71 - no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
Logback是由log4j創始人設計的又一個開源日誌組件。logback當前分紅三個模塊:logback-core,logback- classic和logback-access。logback-core是其它兩個模塊的基礎模塊。logback-classic是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你能夠很方便地更換成其它日誌系統如log4j或JDK14 Logging。logback-access訪問模塊與Servlet容器集成提供經過Http來訪問日誌的功能。 Logback是要與SLF4J結合起來用兩個組件的官方網站以下:
logback的官方網站: http://logback.qos.ch
SLF4J的官方網站:http://www.slf4j.org
Logback和log4j是很是類似的,若是你對log4j很熟悉,那對logback很快就會駕輕就熟。下面列了logback相對於log4j的一些優勢:
總之,logback比log4j優秀。
Logback 配置文件的語法很是靈活。正由於靈活,因此沒法用 DTD 或 XML schema 進行定義。儘管如此,能夠這樣描述配置文件的基本結構:以<configuration>開頭,後面有零個或多個<appender>元素,有零個或多個<logger>元素,有最多一個<root>元素。
logback配置文件實例:
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" value="/home" /> <!-- 控制檯輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> </appender> <!-- 按照天天生成日誌文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌文件輸出的文件名--> <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日誌文件保留天數--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日誌文件最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!--myibatis log configure--> <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> <!-- 日誌輸出級別 --> <root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>