logback 實現給變量指定默認值
格式是 ${變量名:-默認值}
**光有冒號還不夠,再加條短線后面才是默認值**
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
< appender name = "info" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < file >/logs${log.folder:-/imeth}/info.log</ file > < rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" > <!-- daily rollover --> < fileNamePattern >/logs${log.folder:-/imeth}/info.%d{yyyy-MM-dd}.log</ fileNamePattern > <!-- keep 30 days worth of history --> < maxHistory >30</ maxHistory > < maxFileSize >${log.file.size.max:-50}MB</ maxFileSize > </ rollingPolicy > < filter class = "ch.qos.logback.classic.filter.LevelFilter" > < level >INFO</ level > < onMatch >ACCEPT</ onMatch > < onMismatch >DENY</ onMismatch > </ filter > <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> < encoder > < pattern > [%d{yyyy-MM-dd HH:mm:ss}] [%thread] [%-5level] %logger{35} - %msg%n </ pattern > </ encoder > </ appender > |
logback變量
定義變量
- 在 logback.xml 中定義
- 在命令行定義
- 引入properties文件
在 logback.xml 中定義變量
1
2
3
4
5
|
<? xml version = "1.0" encoding = "UTF-8" ?> < configuration > < property name = "logBase" value = "/logs" /> ... </ configuration > |
在命令行定義變量
在命令行通過大D參數來定義
1
|
java -DHOME="/home/logstore" xxx.jar |
引入properties文件
在properties文件定義變量。logback引入properties文件后,獲得變量。
通過文件路徑引入properties文件:
1
2
3
4
|
< configuration > < property file = "/AppPath/logbackVars.properties" /> ... </ configuration > |
通過classpath引入properties文件:
1
2
3
4
|
< configuration > < property resource = "logbackVars.properties" /> ... </ configuration > |
properties文件的格式是 key-value 型:
1
|
HOME=/logs |
變量的作用域
變量有三個作用域:
-
local
作用域在配置文件內有效 -
context
作用域的有效范圍延伸至 logger context -
system
作用域的范圍最廣,整個 JVM 內都有效 -
logback
在替換變量時,首先搜索 local 變量,然后搜索 context,然后搜索 system。
如何為變量指定 scope ?
1
2
3
4
5
6
7
8
|
< configuration > < property scope = "context" name = "home" value = "/logs" /> < appender name = "FILE" class = "ch.qos.logback.core.FileAppender" > < file >/${home}/myApp.log</ file > ... </ appender > ... </ configuration > |
變量的默認值
在引用一個變量時,如果該變量未定義,需要為其指定默認值,寫法是:
${變量名:-默認值}
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<? xml version = "1.0" encoding = "UTF-8" ?> < configuration > < property name = "logBase" value = "${HOME:-/logs}" /> < appender name = "file" class = "ch.qos.logback.core.rolling.RollingFileAppender" > < rollingPolicy class = "ch.qos.logback.core.rolling.TimeBasedRollingPolicy" > < FileNamePattern >${logBase}/log.%d{yyyy-MM-dd}.log</ FileNamePattern > < MaxHistory >60</ MaxHistory > </ rollingPolicy > < encoder > < pattern >%d{yy/MM/dd HH:mm:ss.SSS} %-5level %line %logger{15} - %msg %n</ pattern > < charset >UTF-8</ charset > </ encoder > </ appender > ... </ configuration > |
變量使用
使用方式:
${變量名}
示例:參見前面示例中用法。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/vispin/article/details/50965669