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 相关文章推荐
图解排序算法之希尔排序Java实现
Jun 26 Java/Android
Java反应式框架Reactor中的Mono和Flux
Jul 25 Java/Android
SpringBoot实现quartz定时任务可视化管理功能
Aug 30 Java/Android
springboot中rabbitmq实现消息可靠性机制详解
Sep 25 Java/Android
Java8中Stream的一些神操作
Nov 02 Java/Android
Android开发之WECHAT微信小程序路由跳转的两种形式
Apr 12 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
Java 死锁解决方案
May 11 Java/Android
多线程Spring通过@Scheduled实现定时任务
May 25 Java/Android
Android开发手册TextInputLayout样式使用示例
Jun 10 Java/Android
Java实现HTML转为Word的示例代码
Jun 28 Java/Android
tree shaking对打包体积优化及作用
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+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
jQuery中:password选择器用法实例
2015/01/03 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
实例介绍JavaScript中多种组合继承
2019/01/20 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
javascript实现蒙版与禁止页面滚动
2020/01/11 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
python装饰器初探(推荐)
2016/07/21 Python
python实现学生管理系统
2018/01/11 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Python中的引用和拷贝实例解析
2019/11/14 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
python 实现&quot;神经衰弱&quot;翻牌游戏
2020/11/09 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
医药营销专业个人自荐信
2013/09/29 职场文书
仓库管理制度
2014/01/21 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
影子教师研修方案
2014/06/14 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
民事纠纷协议书
2016/03/23 职场文书
导游词之西安骊山
2019/12/03 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
python可视化大屏库big_screen示例详解
2021/11/23 Python
一文弄懂MySQL索引创建原则
2022/02/28 MySQL