springboot logback動態獲取application的配置項
在多環境的情況下,logback的日志路徑需要進行針對性配置,也就是需要通過application.yml文件中進行配置。
logback自身支持以下方式配置
1
|
< property name = "USER_HOME" value = "/home/sebastien" /> |
但是怎樣才能靈活的配置“/home/sebastien”參數呢,如果不同的環境此參數值不同,那么就需要通過application.yml文件的配置項進行指定。
但是logback.xml加載早于application.yml,如果直接通過${參數key}的形式獲取是無法獲取到對應參數值的。
因此只能使用spring提供的標簽來對此參數進行配置
1
|
< springProperty scope = "context" name = "LOG_HOME" source = "logback.file" /> |
對照上面的配置,其中property替換成了springProperty標簽。兩個配置屬性name效果是一樣的,只不過后者的source指向了application.yml文件中的key。注意此處不需要${}形式獲取。
springboot logback配置及動態配置log目錄
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<? xml version = "1.0" encoding = "utf-8" ?> < configuration > < contextName >xxx-server</ contextName > < property name = "pattern" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n" /> < property name = "pattern-color" value = "%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n" /> < define name = "LOG_HOME" class = "com.youzu.dc.dcopsserver.config.LoggerConfig" /> <!-- 控制臺輸出 --> < appender name = "CONSOLE" class = "ch.qos.logback.core.ConsoleAppender" > < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < pattern >${pattern}</ pattern > </ encoder > </ appender > <!-- 控制臺輸出-帶顏色 --> < appender name = "CONSOLE-WITH-COLOR" class = "ch.qos.logback.core.ConsoleAppender" > < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < pattern >${pattern-color}</ pattern > </ encoder > </ appender > <!-- 文件輸出 --> < appender name = "FILE" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" > < fileNamePattern >${LOG_HOME}/xxxx.%d.%i.log</ fileNamePattern > < timeBasedFileNamingAndTriggeringPolicy class = "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP" > < maxFileSize >100MB</ maxFileSize > </ timeBasedFileNamingAndTriggeringPolicy > < maxHistory >30</ maxHistory > < totalSizeCap >3GB</ totalSizeCap > </ rollingPolicy > < encoder > < pattern >${pattern}</ pattern > </ encoder > </ appender > < root level = "INFO" > < appender-ref ref = "CONSOLE-WITH-COLOR" /> < appender-ref ref = "FILE" /> </ root > </ configuration > |
子節點一 appender
appender用來格式化日志輸出節點,有倆個屬性name和class,class用來指定哪種輸出策略,常用就是控制臺輸出策略和文件輸出策略。
控制臺輸出appender
1
2
3
4
5
6
|
< property name = "pattern" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n" /> < appender name = "CONSOLE" class = "ch.qos.logback.core.ConsoleAppender" > < encoder class = "ch.qos.logback.classic.encoder.PatternLayoutEncoder" > < pattern >${pattern}</ pattern > </ encoder > </ appender > |
encoder表示輸出格式,具體說明如下:
- %d表示時間
- %thread表示線程名
- %-5level 表示日志級別,允許以五個字符長度輸出
- %logger{50}表示具體的日志輸出者,比如類名,括號內表示長度
- %msg表示具體的日志消息,就是logger.info(“xxx”)中的xxx
- %n表示換行
文件輸入appender
文件輸出主要包括配置:以指定格式將日志輸出到指定文件夾下的文件中,可以配置該文件的名稱、最大大小、保存時間
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
< property name = "LOG_HOME" value = "logs" /> < property name = "pattern" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n" /> < appender name = "FILE" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" > < fileNamePattern >${LOG_HOME}/all.%d.%i.log</ fileNamePattern > < timeBasedFileNamingAndTriggeringPolicy class = "ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP" > < maxFileSize >10MB</ maxFileSize > </ timeBasedFileNamingAndTriggeringPolicy > < maxHistory >30</ maxHistory > </ rollingPolicy > < encoder > < pattern >${pattern}</ pattern > </ encoder > </ appender > |
上述配置的主要內容是:以指定的格式向logs文件下的文件輸出日志,文件名稱格式被指定為logs/all.日期.索引號.log,日志文件最大大小為10MB,超出則創建新文件,日志文件保留三十天
索引從0開始遞增
rollingPolicy指滾動粗略,具體配置如上。
關于日志文件大小限制也可以使用1GB配置。
root節點-啟用配置
root節點實際上是配置啟用哪種appender,可以添加多個appender。
比如:
1
2
3
4
|
< root level = "INFO" > < appender-ref ref = "CONSOLE-WITH-COLOR" /> < appender-ref ref = "FILE" /> </ root > |
表示level為info級別,啟用渲染器CONSOLE-WITH-COLOR和FILE。
按照這樣配置,輸出日志時,控制臺會按照CONSOLE定義的格式輸出,而日志文件會按照CONSOLE-WITH-COLOR的配置去輸出。
動態配置log目錄
1
2
3
4
5
6
|
import ch.qos.logback.core.PropertyDefinerBase class LoggerConfig : PropertyDefinerBase() { override fun getPropertyValue(): String { return "${ServerConfig.applicationPath}/logs" } } |
獲取jar目錄路徑
1
2
3
4
5
6
7
|
/** * 獲取jar的絕對路徑文件夾 */ fun getApplicationPath(): String { val h = ApplicationHome(FileUtils:: class .java) return h.source.parentFile.toString() } |
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家.
原文鏈接:https://hello.blog.csdn.net/article/details/79122893