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 @ConfigurationProperties和@PropertySource的区别
Jun 11 Java/Android
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
springboot如何初始化执行sql语句
Jun 22 Java/Android
详解Java分布式事务的 6 种解决方案
Jun 26 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
详细了解java监听器和过滤器
Jul 09 Java/Android
java泛型通配符详解
Jul 25 Java/Android
Java日常练习题,每天进步一点点(38)
Jul 26 Java/Android
Java中try catch处理异常示例
Dec 06 Java/Android
Java十分钟精通进阶适配器模式
Apr 06 Java/Android
Spring 使用注解开发
May 20 Java/Android
Android学习之BottomSheetDialog组件的使用
Jun 21 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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
利用js调用后台php进行数据处理原码
2006/10/09 PHP
基于mysql的论坛(7)
2006/10/09 PHP
php Undefined index的问题
2009/06/01 PHP
php whois查询API制作方法
2011/06/23 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
2014/11/04 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
python mysqldb连接数据库
2009/03/16 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
内部类的定义、种类以及优点
2013/10/16 面试题
职工代表大会主持词
2014/04/01 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
农村党员干部承诺书
2015/05/04 职场文书
学习雷锋主题班会
2015/08/14 职场文书
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫