Spring Boot(08)——日誌輸出
日誌輸出
使用了spring-boot-starter
後,將新增spring-boot-starter-logging
依賴,此時Spring Boot將使用logback進行日誌輸出,預設只會輸出INFO級別以上的日誌資訊,且只會輸出到控制檯。預設的日誌格式是如下這樣的。前面是日誌輸出時間,INFO
是日誌級別,7496
是程序號,[ost-startStop-1]
是用[]
包起來的執行緒名,o.s.web.context.ContextLoader
是日誌名稱,接下來冒號後面的內容就是真正的日誌資訊。
2018-07-06 16:03:13.083 INFO 7496 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2954 ms 2018-07-06 16:03:13.255 INFO 7496 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/]
可以通過logging.pattern.dateformat
單獨指定日誌裡面的日期輸出格式,可以通過logging.pattern.level
單獨指定日誌中日誌級別輸出的格式。下面的程式碼中就分別指定了日期輸出格式和日誌級別的輸出格式。
logging.pattern.dateformat=HH:mm:ss.sss logging.pattern.level=custom-%5p
按照上面自定義的日期格式和日誌級別輸出格式後,輸出的日誌會是類似於下面這樣的。
16:03:13.083 custom-INFO 7496 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2954 ms 16:03:13.255 custom-INFO 7496 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/]
也可以通過#logging.pattern.console
單獨指定控制檯的日誌輸出格式,通過#logging.pattern.file
指定輸出到檔案的日誌格式。
#logging.pattern.console=console-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n #logging.pattern.file=file-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} -%msg%n
指定日誌輸出檔案
預設的日誌資訊只會輸出到控制檯,可以在application.properties
logging.file
指定日誌輸出檔名。當不指定路徑時,預設將在當前路徑下建立日誌檔案。
logging.file=logback.log
指定logging.file
時也可以指定路徑,如下則指定了日誌內容將寫入到/logs
目錄下的logback.log
檔案。
logging.file=/logs/logback.log
當不指定logging.file
時也可以通過logging.path
指定日誌檔案輸出的路徑,這樣日誌內容將寫入到指定目錄下的spring.log
檔案。如下配置則表示日誌內容將寫入到/logs/spring.log
檔案中。
logging.path=/logs
日誌檔案壓縮
預設情況下每個日誌檔案寫入10MB內容後將重新產生一個新的日誌檔案,然後將老的進行壓縮,可以通過logging.file.max-size=20MB
指定每個日誌檔案最多寫入20MB日誌。預設情況下壓縮的日誌檔案將不斷產生,沒有數量限制,可以通過logging.file.max-history
指定需要保留的歷史日誌檔案數量。
調整日誌級別
日誌級別可以通過logging.level.logName=logLevel
的形式進行調整,其中根日誌級別可以通過logging.level.root
進行調整。比如下面的程式碼就配置了根日誌級別為WARN
,而com.elim
打頭的日誌級別為INFO
,org.springframework
打頭的日誌級別為DEBUG
。
logging.level.root=WARN logging.level.com.elim=INFO logging.level.org.springframework=DEBUG
自定義配置檔案
Spring Boot也允許我們通過定義logback.xml
或logback-spring.xml
檔案進行自定義的日誌輸出配置。Spring Boot建議我們定義日誌輸出檔案為logback-spring.xml
,因為logback.xml
是logback的預設日誌檔案,會被logback自動載入,直接使用它時有些東西可能Spring Boot還沒來得及初始化,並且使用logback.xml
不能使用Spring Boot新增的一些擴充套件。之後就可以在配置檔案中按照logback的規範進行配置了,以下是一個簡單的配置,只配置了控制檯輸出。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> </root> </configuration>
擴充套件使用springProfile
在logback-spring.xml
中可以使用Spring Boot擴充套件的<springProfile/>
,它可以用在根元素<configuration/>
元素下的任何位置,用來包裹任何元素。<springProfile/>
用來定義在特定Profile被啟用時將使用的特殊配置資訊,比如下面的程式碼中就定義了當dev這個Profile被啟用時將定義org.springframework
這個logger的輸出級別為DEBUG。
<springProfile name="dev"> <logger name="org.springframework" level="DEBUG"/> </springProfile>
擴充套件使用springProperty
在logback-spring.xml
中可以使用Spring Boot擴充套件的<springProperty/>
,使用它可以把在application.properties
中定義的屬性值對映為logback環境中的一個屬性,從而可以在logback的上下文使用。下面的配置中定義了屬性appName
對應於Spring Boot的Environment中的app.name
(由source屬性指定),當未指定時預設使用defaultValue屬性指定的TEST
;屬性logPath
對應於Spring Boot的Environment中的log.path
,未指定時使用/logs/${appName}.log
,其中的${appName}
又對應於變數appName
的值。定義好的變數可以在logback的配置檔案中以${varName}
的形式進行引用。
<configuration> <springProperty name="appName" source="app.name" defaultValue="TEST"/> <springProperty name="logPath" source="log.path" defaultValue="/logs/${appName}.log"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${appName}-%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${logPath}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${logPath}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>5MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> </configuration>
(注:本文基於Spring Boot 2.0.3所寫)