springboot log多環(huán)境配置方式
前言
bootstrap.yml(bootstrap.properties)與application.yml(application.properties)執(zhí)行順序
- bootstrap.yml(bootstrap.properties)用來程序引導(dǎo)時(shí)執(zhí)行,應(yīng)用于更加早期配置信息讀取,如可以使用來配置application.yml中使用到參數(shù)等
- application.yml(application.properties) 應(yīng)用程序特有配置信息,可以用來配置后續(xù)各個(gè)模塊中需使用的公共參數(shù)等。
- bootstrap.yml 先于 application.yml 加載
1.第一種方法
直接寫在application.yml里面,也能適配環(huán)境修改,但是只能使用默認(rèn)一些策略,比如10M切分一個(gè)文件。
#日志配置 logging: ? level: ? ? root: INFO ? file: /home/xxx/logs/xxx.log
2.第二種方法
logback-spring.xml
<?xml version="1.0" encoding="utf-8"?> <!-- Level 描述 ALL 各級(jí)包括自定義級(jí)別 ERROR 錯(cuò)誤事件可能仍然允許應(yīng)用程序繼續(xù)運(yùn)行 FATAL 指定非常嚴(yán)重的錯(cuò)誤事件,這可能導(dǎo)致應(yīng)用程序中止 INFO 指定能夠突出在粗粒度級(jí)別的應(yīng)用程序運(yùn)行情況的信息的消息 OFF 這是最高等級(jí),為了關(guān)閉日志記錄 TRACE 指定細(xì)粒度比DEBUG更低的信息事件 WARN 指定具有潛在危害的情況 scan:當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為true。 scanPeriod:設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,如果沒有給出時(shí)間單位,默認(rèn)單位是毫秒。當(dāng)scan為true時(shí),此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘。 debug:當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為false。--> <configuration debug="true" scan="true" scanPeriod="30 seconds"> <!-- 存放日志文件路徑 該 <springProperty> 標(biāo)簽允許我們從Spring中顯示屬性--> <springProperty scope="context" name="logHome" source="log.path"/> <!-- ch.qos.logback.core.ConsoleAppender 控制臺(tái)輸出 --> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符 --> <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern> </layout> </appender> <!-- INFO級(jí)別 --> <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 級(jí)別過濾器:如果只是想要INFO級(jí)別的日志,只是過濾info還是會(huì)輸出ERROR日志,因?yàn)镋RROR的級(jí)別高, 所以我們使用下面的策略,可以避免輸出ERROR的日志--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 過濾ERROR --> <level>ERROR</level> <!-- 匹配到就禁止 --> <onMatch>DENY</onMatch> <!-- 沒有匹配到就允許 --> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符 --> <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <!--日志名稱,如果沒有File 屬性,那么只會(huì)使用FileNamePattern的文件路徑規(guī)則,如果同時(shí)有<File>和<FileNamePattern>, 那么當(dāng)天日志是<File>,明天會(huì)自動(dòng)把今天的日志改名為今天的日期。即<File> 的日志都是當(dāng)天的。--> <!-- 根據(jù)時(shí)間來制定滾動(dòng)策略 TimeBasedRollingPolicy--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--路徑--> <fileNamePattern>${logHome}/%d/info/info.log</fileNamePattern> <!--保存最大天數(shù)--> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <!-- ERROR級(jí)別--> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--如果只是想要 ERROR 級(jí)別的日志,那么需要過濾一下,默認(rèn)是 INFO 級(jí)別的,ThresholdFilter--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符 --> <pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> <!-- 基于規(guī)模和時(shí)間的滾動(dòng)策略 SizeAndTimeBasedRollingPolicy--> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--路徑--> <fileNamePattern>${logHome}/%d/error/error.%i.log</fileNamePattern> <!--保存最大天數(shù)--> <maxHistory>30</maxHistory> <!--文件最大值--> <maxFileSize>2MB</maxFileSize> <!--總大小上限--> <totalSizeCap>10MB</totalSizeCap> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="consoleLog"/> <appender-ref ref="fileInfoLog"/> <appender-ref ref="fileErrorLog"/> </root> </configuration>
一開始在application.yml 配置了log路徑,但是springProperty 標(biāo)簽里面并沒有獲取到,會(huì)見在jar包存放的文件夾下,新建logHome_IS_UNDEFINED/%d/info/info.log,看下啟動(dòng)日志(一部分):
13:44:32,739 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@992086987 - No compression will be used
13:44:32,742 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@992086987 - Will use the pattern logHome_IS_UNDEFINED/%d/info/info.log for the active file
13:44:32,747 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'logHome_IS_UNDEFINED/%d/info/info.log'.
13:44:32,748 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
13:44:32,752 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Tue Aug 21 13:44:32 CST 2018
13:44:32,753 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[fileInfoLog] - Active log file name: logHome_IS_UNDEFINED/2018-08-21/info/info.log
13:44:32,753 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[fileInfoLog] - File property is set to [null]
13:44:32,757 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
13:44:32,757 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [fileErrorLog]
13:44:32,758 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
13:44:32,763 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@737104370 - Archive files will be limited to [2 MB] each.
13:44:32,764 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@737104370 - No compression will be used
13:44:32,764 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@737104370 - Will use the pattern logHome_IS_UNDEFINED/%d/error/error.%i.log for the active file
13:44:32,765 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@30f5a68a - The date pattern is 'yyyy-MM-dd' from file name pattern 'logHome_IS_UNDEFINED/%d/error/error.%i.log'.
所以我在bootstrap.yml配置log.path來解決這個(gè)問題。
log: path: F:/logs/local-preferential --- spring: profiles: test log: path: /home/xxx-test/logs --- spring: profiles: prod log: path: /home/xxx/logs
啟動(dòng)打印log配置日志(一部分)
13:43:03,375 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@224192895 - No compression will be used
13:43:03,376 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@224192895 - Will use the pattern F:/logs/local-preferential/%d/info/info.log for the active file
13:43:03,377 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'F:/logs/local-preferential/%d/info/info.log'.
13:43:03,377 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
13:43:03,377 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Tue Aug 21 13:43:03 CST 2018
13:43:03,377 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[fileInfoLog] - Active log file name: F:/logs/local-preferential/2018-08-21/info/info.log
13:43:03,378 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[fileInfoLog] - File property is set to [null]
13:43:03,378 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
13:43:03,378 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [fileErrorLog]
13:43:03,379 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
13:43:03,381 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1883788127 - Archive files will be limited to [2 MB] each.
13:43:03,381 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1883788127 - No compression will be used
13:43:03,382 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1883788127 - Will use the pattern F:/logs/local-preferential/%d/error/error.%i.log for the active file
13:43:03,382 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@e3994ef - The date pattern is 'yyyy-MM-dd' from file name pattern 'F:/logs/local-preferential/%d/error/error.%i.log'.
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java實(shí)現(xiàn)計(jì)算器加法小程序(圖形化界面)
這篇文章主要介紹了Java實(shí)現(xiàn)圖形化界面的計(jì)算器加法小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05Java從內(nèi)存角度帶你理解數(shù)組名實(shí)質(zhì)是個(gè)地址的論述
這篇文章主要介紹了Java如何從內(nèi)存解析的角度理解“數(shù)組名實(shí)質(zhì)是一個(gè)地址”,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-09-09將java普通項(xiàng)目打包成exe可執(zhí)行文件的步驟記錄
將JAVA代碼打包為exe文件,會(huì)讓程序運(yùn)行更加方便,這篇文章主要給大家介紹了關(guān)于將java普通項(xiàng)目打包成exe可執(zhí)行文件的相關(guān)資料,需要的朋友可以參考下2021-07-07java 在Jetty9中使用HttpSessionListener和Filter
這篇文章主要介紹了java 在Jetty9中使用HttpSessionListener和Filter的相關(guān)資料,需要的朋友可以參考下2017-06-06Springboot 全局時(shí)間格式化三種方式示例詳解
時(shí)間格式化在項(xiàng)目中使用頻率是非常高的,當(dāng)我們的 API? 接口返回結(jié)果,需要對(duì)其中某一個(gè) date? 字段屬性進(jìn)行特殊的格式化處理,通常會(huì)用到 SimpleDateFormat? 工具處理,這篇文章主要介紹了3 種 Springboot 全局時(shí)間格式化方式,需要的朋友可以參考下2024-01-01SpringBoot實(shí)現(xiàn)各種參數(shù)校驗(yàn)總結(jié)(建議收藏!)
本文深入解析了Spring?Validation的使用方法、實(shí)現(xiàn)原理及最佳實(shí)踐,詳細(xì)介紹了各種參數(shù)校驗(yàn)場(chǎng)景,如requestBody和requestParam/PathVariable的使用,并探討了分組校驗(yàn)、嵌套校驗(yàn)和自定義校驗(yàn)的高級(jí)應(yīng)用,需要的朋友可以參考下2024-09-09JAVA基于靜態(tài)數(shù)組實(shí)現(xiàn)棧的基本原理與用法詳解
這篇文章主要介紹了JAVA基于靜態(tài)數(shù)組實(shí)現(xiàn)棧的基本原理與用法,結(jié)合實(shí)例形式詳細(xì)分析了JAVA基于靜態(tài)數(shù)組實(shí)現(xiàn)棧相關(guān)原理、用法與操作注意事項(xiàng),需要的朋友可以參考下2020-03-03Java基于redis實(shí)現(xiàn)分布式鎖代碼實(shí)例
這篇文章主要介紹了Java基于redis實(shí)現(xiàn)分布式鎖代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04