logback 实现给变量指定默认值


Posted in Java/Android onAugust 30, 2021

logback 实现给变量指定默认值

格式是 ${变量名:-默认值}

**光有冒号还不够,再加条短线后面才是默认值**

<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 中定义变量

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="logBase" value="/logs"/>
...
</configuration>

在命令行定义变量

在命令行通过大D参数来定义

java -DHOME="/home/logstore" xxx.jar

引入properties文件

在properties文件定义变量。logback引入properties文件后,获得变量。

通过文件路径引入properties文件:

<configuration>
  <property file="/AppPath/logbackVars.properties" />
...
</configuration>

通过classpath引入properties文件:

<configuration>
  <property resource="logbackVars.properties" />
...
</configuration>

properties文件的格式是 key-value 型:

HOME=/logs

变量的作用域

变量有三个作用域:

  • local 作用域在配置文件内有效
  • context 作用域的有效范围延伸至 logger context
  • system 作用域的范围最广,整个 JVM 内都有效
  • logback 在替换变量时,首先搜索 local 变量,然后搜索 context,然后搜索 system。

如何为变量指定 scope ?

<configuration>
  <property scope="context" name="home" value="/logs" />
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>/${home}/myApp.log</file>
...
  </appender>
...
</configuration>

变量的默认值

在引用一个变量时,如果该变量未定义,需要为其指定默认值,写法是:

${变量名:-默认值}

示例:

<?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>

变量使用

使用方式:

${变量名}

示例:参见前面示例中用法。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
解决SpringBoot文件上传临时目录找不到的问题
Jul 01 Java/Android
mybatis3中@SelectProvider传递参数方式
Aug 04 Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 Java/Android
springboot中rabbitmq实现消息可靠性机制详解
Sep 25 Java/Android
Java8中Stream的一些神操作
Nov 02 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
Dubbo+zookeeper搭配分布式服务的过程详解
Apr 03 Java/Android
springboot用户数据修改的详细实现
Apr 06 Java/Android
Android Rxjava3 使用场景详解
Apr 07 Java/Android
Java 垃圾回收超详细讲解记忆集和卡表
Apr 08 Java/Android
Java工作中实用的代码优化技巧分享
Apr 21 Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 #Java/Android
使用logback实现按自己的需求打印日志到自定义的文件里
Aug 30 #Java/Android
logback如何自定义日志存储
Aug 30 #Java/Android
idea以任意顺序debug多线程程序的具体用法
Aug 30 #Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
Aug 30 #Java/Android
Java SSM配置文件案例详解
Aug 30 #Java/Android
java调用Restful接口的三种方法
Aug 23 #Java/Android
You might like
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
2012/01/16 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
利用js(jquery)操作Cookie的方法说明
2013/12/19 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
2015/09/16 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
Javascript的表单验证-初识正则表达式
2016/03/18 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
python中安装模块包版本冲突问题的解决
2017/05/02 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
python面试题之列表声明实例分析
2019/07/08 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
python中数字是否为可变类型
2020/07/08 Python
一文带你掌握Pyecharts地理数据可视化的方法
2021/02/06 Python
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
存储过程和函数的区别
2013/05/28 面试题
便利店的创业计划书
2014/01/15 职场文书
创先争优一句话承诺
2014/05/29 职场文书
无犯罪记录证明
2014/09/19 职场文书
2014年纠风工作总结
2014/12/08 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
车间安全生产管理制度
2015/08/06 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python
分享几种python 变量合并方法
2022/03/20 Python
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis