1. 程式人生 > >Spring Boot學習--logback與properties配置檔案

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

這些內容很簡單,也很實用,關於這些如果有問題可以給我留言。