Spring Boot學習--logback與properties配置檔案
Spring Boot支援多種log外掛,這裡說的是logback。
準確說來,這次要介紹的有兩點:
- profiles與logback
- 從logback中獲取配置檔案中的資訊
有一點需要先說明,這裡先要把logback.xml的名字改為logback-spring.xml。
官網上明確說了,如果不改名字,使用logging.config會出現一些問題,所以我們直接把名字改了比較好。
profiles與logback
一般的配置檔案都會有四個:application、dev、staging和prod。相信這幾個不需要我來解釋了。
有些時候生成日誌也可能在不同環境下要求標準不一樣,這就有了在log中對環境選擇的需求。
標籤能夠在標籤的任何位置使用。官方示例如下:
<springProfile name="staging">
<!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>
<springProfile name="dev, staging">
<!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>
<springProfile name="!production">
<!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>
現在我來給出具體示例,我想在不同的環境下,log檔案的路徑不同:
具體程式碼,方便大家拷貝:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="300 seconds">
<springProperty scop="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<springProfile name="dev">
<fileNamePattern>/logs/dev/myconfig.%d{yyyy-MM-dd}.log</fileNamePattern>
</springProfile>
<springProfile name="prod">
<fileNamePattern>/logs/prod/myconfig.%d{yyyy-MM-dd}.log</fileNamePattern>
</springProfile>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${fluentHost} %d{yyyy-MM-dd HH:mm:ss}: %p [%t] %c{1} %F:%L - %m%n</pattern>
</encoder>
</appender>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${fluentHost} %d{yyyy-MM-dd HH:mm:ss}: %p [%t] %c{1} %F:%L - %m%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="file" />
<appender-ref ref="stdout" />
</root>
</configuration>
我這裡只是做演示,沒有定義staging環境。
我給dev和prod環境配置了不同的log檔案生成路徑,分別使dev檔案生效和prod生效會有我們期望的效果。
application.properties中的配置:
spring.profiles.active=dev
這是使dev生效,是prod生效的時候將上面改為prod即可。具體效果不做演示了。
從logback中獲取配置檔案中的資訊
現在來看第二點,從配置檔案中讀取配置資訊,也是大多數朋友想要的功能。
這裡要用到標籤。
官網示例:
<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
<remoteHost>${fluentHost}</remoteHost>
...
</appender>
source的內容為application.properties中定義的資訊,defaultValue為預設值,name就是在這個配置檔案中的變數名,scope固定值,使用${}來獲取值。
看示例:
<springProperty scop="context" name="fluentHost" source="myapp.fluentd.host" defaultValue="localhost"/>
這行程式碼配置在logback-spring.xml中,在上面有給出完整的資訊。
在下邊任意位置可以使用${fluentHost}來獲取配置檔案中的內容,如果沒有配置,既可以獲得預設值localhost。
application.properties中的配置:
myapp.fluentd.host=8.8.8.8
這些內容很簡單,也很實用,關於這些如果有問題可以給我留言。