Springboot如何使用logback實(shí)現(xiàn)多環(huán)境配置?
前言
Logback是由log4j創(chuàng)始人設(shè)計(jì)的又一個(gè)開(kāi)源日記組件,Logback 當(dāng)前分成三個(gè)模塊:logback-core,logback- classic和logback-access。logback-core是其它兩個(gè)模塊的基礎(chǔ)模塊,logback-classic是log4j的一個(gè)改良版本。此外logback-classic完整實(shí)現(xiàn)SLF4J API使你可以很方便地更換成其它日記系統(tǒng)如log4j或JDK14 Logging。logback-access訪(fǎng)問(wèn)模塊與Servlet容器集成提供通過(guò)Http來(lái)訪(fǎng)問(wèn)日記的功能
引入依賴(lài)
引入logback所需要的依賴(lài)
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.18</version> </dependency>
如果使用spring-boot,兼容logback,默認(rèn)已經(jīng)集成了這些文件,所以就不需要自己依賴(lài)注入了,直接在項(xiàng)目中使用就行了。
配置項(xiàng)值方案
利用Spring boot中application.yml的spring.profiles.active
環(huán)境配置,dev開(kāi)發(fā)環(huán)境和部署環(huán)境連接的數(shù)據(jù)庫(kù)地址、debug模式等等都是不同的,為了區(qū)分dev開(kāi)發(fā)環(huán)境配置和生產(chǎn)環(huán)境配置,可以創(chuàng)建兩個(gè)yml文件,什么環(huán)境使用相應(yīng)的配置文件:
- application.yml:公共配置文件,里面可以通過(guò)spring.profiles.active=dev來(lái)指定使用哪個(gè)配置文件
- application-dev.yml:開(kāi)發(fā)環(huán)境配置文件
- application-prod.yml:生產(chǎn)環(huán)境配置文件
注意:
1、當(dāng)公共配置文件application.yml和dev.yml(或prod.yml)同時(shí)存在同一個(gè)配置的時(shí)候,以dev.yml(prod.yml)配置文件為主,
2、當(dāng)配置項(xiàng)只在公共application.yml文件中有的時(shí)候,以公共配置為主
3、可以把公共配置項(xiàng)放到application.yml中
我們?cè)诳磀ev.xml和prod.xml配置文件
dev.xml配置
#dev.xml中的配置,用戶(hù)開(kāi)發(fā)環(huán)境 log: path: /Users/gujiachun/Downloads level: debug
prod.xml配置
#prod.xml中的配置,用戶(hù)生產(chǎn)環(huán)境 log: path: /Users/gujiachun/Downloads level: info
此方案的設(shè)計(jì)原理就是,不同環(huán)境不同的配置值;然后在logback-spring.xml中使用此配置值。
上圖就是logback-spring.xml配置,里面有個(gè)重要的就是springProperty標(biāo)簽,可以利用這個(gè)標(biāo)簽引用到application.yml中的值(包含dev.xml、prod.xml);log.level和log.path的值就可以在logback-spring.xml中使用,使用方式 l o g P a t h 、 {logPath}、 logPath、{logLevel}。
測(cè)試代碼
啟動(dòng)測(cè)試,指定spring.profiles.active=dev或prod;我們發(fā)現(xiàn)在logPath目錄出現(xiàn)對(duì)應(yīng)的日志文件
因?yàn)椴煌沫h(huán)境,我們配置成日志級(jí)別不一樣,dev對(duì)應(yīng)debug,prod對(duì)應(yīng)info;日志文件內(nèi)容不同環(huán)境對(duì)應(yīng)不同內(nèi)容
dev環(huán)境輸出
2020-01-04 10:01:50,298 -- debug...
2020-01-04 10:01:50,298 -- info...
2020-01-04 10:01:50,298 -- error...
prod環(huán)境輸出
2020-01-04 10:03:55,198 -- info...
2020-01-04 10:03:55,198 -- error...
外部配置文件方案
另一種更簡(jiǎn)單的方式,可以利用logging.config指定配置文件,而且有一個(gè)好處可以不一定要取名logback-spring.xml;我們來(lái)看一下
application-dev.xml環(huán)境
#日志相關(guān)配置 logging: config: classpath:conf/logback-dev.xml
application-prod環(huán)境
#日志相關(guān)配置 logging: config: classpath:conf/logback-prd.xml
logback-dev.xml配置
logback-prod.xml配置
啟動(dòng)指定spring.profiles.active=dev
在控制臺(tái)輸出了
而在日志文件
日志內(nèi)容
2020-01-04 11:56:10 [39mDEBUG[0;39m 7454 --- [main] [36mc.r.g.t.LoggerTest[0;39m : debug:....
為什么只有debug日志,沒(méi)有info、error;這個(gè)是因?yàn)槿罩疚募屑恿藗€(gè)過(guò)濾器
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>${logLevel}</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter>
此過(guò)濾器中的屬性onMatch和onMismatch,匹配日志級(jí)別就接受,不匹配就不接受。所以只接受debug級(jí)別。
啟動(dòng)指定spring.profiles.active=prod
控制臺(tái)輸出
日志文件
生成了4個(gè)文件,也是因?yàn)檫^(guò)濾器,生產(chǎn)環(huán)境的日志級(jí)別為info,所以debug日志文件里面為空。
springProfile方案
springProfile標(biāo)簽在logback.xml中可以起到區(qū)分不同環(huán)境分支;如果我們需要配置不同環(huán)境,不同的輸出方式,如:dev環(huán)境輸出到控制臺(tái)以及文件,prod環(huán)境只要輸出到文件。
logback-spring.xml配置
這樣就可以在同一個(gè)配置xml文件中,配置不同的環(huán)境值。
總結(jié)
上面介紹了幾個(gè)方案,小伙伴們可以選擇適合自己業(yè)務(wù)的方案,下一篇老顧介紹日志在集群中的方式。謝謝?。?!
到此這篇關(guān)于Springboot如何使用logback實(shí)現(xiàn)多環(huán)境配置?的文章就介紹到這了,更多相關(guān)logback實(shí)現(xiàn)多環(huán)境配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java利用Request請(qǐng)求如何獲取IP地址對(duì)應(yīng)的省份、城市詳解
之前已經(jīng)給大家介紹了關(guān)于Java用Request請(qǐng)求獲取IP地址的相關(guān)內(nèi)容,那么下面這篇文章將給大家進(jìn)入深入的介紹,關(guān)于Java利用Request請(qǐng)求如何獲取IP地址對(duì)應(yīng)省份、城市的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-10-10Java關(guān)鍵字詳解之final static this super的用法
this用來(lái)調(diào)用目前類(lèi)自身的成員變量,super多用來(lái)調(diào)用父類(lèi)的成員,final多用來(lái)定義常量用的,static定義靜態(tài)變量方法用的,靜態(tài)變量方法只能被類(lèi)本身調(diào)用,下文將詳細(xì)介紹,需要的朋友可以參考下2021-10-10springcloud nacos的賦值均衡和動(dòng)態(tài)刷新
nacos是一個(gè)分布式的配置中心和注冊(cè)發(fā)現(xiàn)中心,這篇文章主要介紹了springcloud nacos的賦值均衡和動(dòng)態(tài)刷新,需要的朋友可以參考下2024-05-05Java中使用ForkJoinPool的實(shí)現(xiàn)示例
ForkJoinPool是一個(gè)功能強(qiáng)大的Java類(lèi),用于處理計(jì)算密集型任務(wù),本文主要介紹了Java中使用ForkJoinPool的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09springboot使用GuavaCache做簡(jiǎn)單緩存處理的方法
這篇文章主要介紹了springboot使用GuavaCache做簡(jiǎn)單緩存處理的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01Spring?Boot整合?NoSQL?數(shù)據(jù)庫(kù)?Redis詳解
這篇文章主要為大家介紹了Spring?Boot整合?NoSQL?數(shù)據(jù)庫(kù)?Redis詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Springcloud+Mybatis使用多數(shù)據(jù)源的四種方式(小結(jié))
這篇文章主要介紹了Springcloud+Mybatis使用多數(shù)據(jù)源的四種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09