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 相关文章推荐
MybatisPlus代码生成器的使用方法详解
Jun 13 Java/Android
Spring boot应用启动后首次访问很慢的解决方案
Jun 23 Java/Android
详解Java实现数据结构之并查集
Jun 23 Java/Android
springboot项目以jar包运行的操作方法
Jun 30 Java/Android
解决Swagger2返回map复杂结构不能解析的问题
Jul 02 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
Sleuth+logback 设置traceid 及自定义信息方式
Jul 26 Java/Android
Java9新特性对HTTP2协议支持与非阻塞HTTP API
Mar 16 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
mapstruct的用法之qualifiedByName示例详解
Apr 06 Java/Android
Java Spring Boot请求方式与请求映射过程分析
Jun 25 Java/Android
Spring中bean集合注入的方法详解
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
destoon常用的安全设置概述
2014/06/21 PHP
php实现的读取CSV文件函数示例
2017/02/07 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
jQuery实现不断闪烁文字的方法
2015/05/15 Javascript
Jquery实现动态切换图片的方法
2015/05/18 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
JS数组操作之增删改查的简单实现
2017/08/21 Javascript
React.js绑定this的5种方法(小结)
2018/06/05 Javascript
简述JS控制台的使用
2018/07/15 Javascript
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
Python中functools模块函数解析
2017/03/12 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
python实现图片九宫格分割
2021/03/07 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
10个顶级Python实用库推荐
2021/03/04 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
电子邮箱格式怎么写
2014/01/12 职场文书
离退休人员聘用协议书
2014/11/24 职场文书
交警失职检讨书
2015/01/26 职场文书
导游词之舟山普陀山
2019/11/06 职场文书