使用springboot logback動(dòng)態(tài)獲取application的配置項(xiàng)
springboot logback動(dòng)態(tài)獲取application的配置項(xiàng)
在多環(huán)境的情況下,logback的日志路徑需要進(jìn)行針對(duì)性配置,也就是需要通過(guò)application.yml文件中進(jìn)行配置。
logback自身支持以下方式配置
<property name="USER_HOME" value="/home/sebastien" />
但是怎樣才能靈活的配置“/home/sebastien”參數(shù)呢,如果不同的環(huán)境此參數(shù)值不同,那么就需要通過(guò)application.yml文件的配置項(xiàng)進(jìn)行指定。
但是logback.xml加載早于application.yml,如果直接通過(guò)${參數(shù)key}的形式獲取是無(wú)法獲取到對(duì)應(yīng)參數(shù)值的。
因此只能使用spring提供的標(biāo)簽來(lái)對(duì)此參數(shù)進(jìn)行配置
<springProperty scope="context" name="LOG_HOME" source="logback.file"/>
對(duì)照上面的配置,其中property替換成了springProperty標(biāo)簽。兩個(gè)配置屬性name效果是一樣的,只不過(guò)后者的source指向了application.yml文件中的key。注意此處不需要${}形式獲取。
springboot logback配置及動(dòng)態(tài)配置log目錄
<?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" />
<!-- 控制臺(tái)輸出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 控制臺(tái)輸出-帶顏色 -->
<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>
子節(jié)點(diǎn)一 appender
appender用來(lái)格式化日志輸出節(jié)點(diǎn),有倆個(gè)屬性name和class,class用來(lái)指定哪種輸出策略,常用就是控制臺(tái)輸出策略和文件輸出策略。
控制臺(tái)輸出appender
<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表示輸出格式,具體說(shuō)明如下:
- %d表示時(shí)間
- %thread表示線程名
- %-5level 表示日志級(jí)別,允許以五個(gè)字符長(zhǎng)度輸出
- %logger{50}表示具體的日志輸出者,比如類名,括號(hào)內(nèi)表示長(zhǎng)度
- %msg表示具體的日志消息,就是logger.info(“xxx”)中的xxx
- %n表示換行
文件輸入appender
文件輸出主要包括配置:以指定格式將日志輸出到指定文件夾下的文件中,可以配置該文件的名稱、最大大小、保存時(shí)間
例如:
<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>
上述配置的主要內(nèi)容是:以指定的格式向logs文件下的文件輸出日志,文件名稱格式被指定為logs/all.日期.索引號(hào).log,日志文件最大大小為10MB,超出則創(chuàng)建新文件,日志文件保留三十天
索引從0開始遞增
rollingPolicy指滾動(dòng)粗略,具體配置如上。
關(guān)于日志文件大小限制也可以使用1GB配置。
root節(jié)點(diǎn)-啟用配置
root節(jié)點(diǎn)實(shí)際上是配置啟用哪種appender,可以添加多個(gè)appender。
比如:
<root level="INFO"> <appender-ref ref="CONSOLE-WITH-COLOR"/> <appender-ref ref="FILE"/> </root>
表示level為info級(jí)別,啟用渲染器CONSOLE-WITH-COLOR和FILE。
按照這樣配置,輸出日志時(shí),控制臺(tái)會(huì)按照CONSOLE定義的格式輸出,而日志文件會(huì)按照CONSOLE-WITH-COLOR的配置去輸出。
動(dòng)態(tài)配置log目錄
import ch.qos.logback.core.PropertyDefinerBase
class LoggerConfig : PropertyDefinerBase() {
override fun getPropertyValue(): String {
return "${ServerConfig.applicationPath}/logs"
}
}
獲取jar目錄路徑
/**
* 獲取jar的絕對(duì)路徑文件夾
*/
fun getApplicationPath(): String {
val h = ApplicationHome(FileUtils::class.java)
return h.source.parentFile.toString()
}
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家.
- SpringBoot整合logback日志的詳細(xì)步驟
- SpringBoot中項(xiàng)目如何讀取外置logback配置文件
- 解決springboot配置logback-spring.xml不起作用問題
- Springboot使用Logback實(shí)現(xiàn)日志配置與異常記錄
- SpringBoot項(xiàng)目讀取外置logback配置文件的問題及解決
- springboot logback如何從apollo配置中心讀取變量
- springboot 使用logback啟動(dòng)報(bào)警報(bào)錯(cuò)的解決
- 詳解Springboot之Logback的使用學(xué)習(xí)
- 解決springboot使用logback日志出現(xiàn)LOG_PATH_IS_UNDEFINED文件夾的問題
- Springboot整合logback的詳細(xì)教程
相關(guān)文章
java使用Process調(diào)用exe程序及Process.waitFor()死鎖問題解決
在編寫Java程序時(shí),有時(shí)候我們需要調(diào)用其他的諸如exe,shell這樣的程序或腳本,下面這篇文章主要給大家介紹了關(guān)于java使用Process調(diào)用exe程序及Process.waitFor()死鎖問題解決的相關(guān)資料,需要的朋友可以參考下2022-12-12
SpringBoot啟動(dòng)時(shí)如何通過(guò)啟動(dòng)參數(shù)指定logback的位置
這篇文章主要介紹了SpringBoot啟動(dòng)時(shí)如何通過(guò)啟動(dòng)參數(shù)指定logback的位置,在spring boot中,使用logback配置的方式常用的有兩種,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
SpringBoot自帶模板引擎Thymeleaf使用示例詳解
Thymeleaf是一款用于渲染XML/HTML5內(nèi)容的模板引擎,類似JSP,它可以輕易的與SpringMVC等Web框架進(jìn)行集成作為Web應(yīng)用的模板引擎,本文給大家介紹SpringBoot自帶模板引擎Thymeleaf使用示例,感興趣的朋友一起看看吧2023-12-12
Spring Boot整合Spring Cache及Redis過(guò)程解析
這篇文章主要介紹了Spring Boot整合Spring Cache及Redis過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

