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 相关文章推荐
JPA如何使用entityManager执行SQL并指定返回类型
Jun 15 Java/Android
Java基于字符界面的简易收银台
Jun 26 Java/Android
Java网络编程之UDP实现原理解析
Sep 04 Java/Android
Java异常处理try catch的基本用法
Dec 06 Java/Android
springmvc直接不经过controller访问WEB-INF中的页面问题
Feb 24 Java/Android
剑指Offer之Java算法习题精讲二叉树的构造和遍历
Mar 21 Java/Android
Java 超详细讲解数据结构中的堆的应用
Apr 02 Java/Android
java如何实现获取客户端ip地址的示例代码
Apr 07 Java/Android
Java GUI编程菜单组件实例详解
Apr 07 Java/Android
Spring 使用注解开发
May 20 Java/Android
Android开发手册自定义Switch开关按钮控件
Jun 10 Java/Android
Java完整实现记事本代码
Jun 16 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和XSL stylesheets转换XML文档
2006/10/09 PHP
php二维码生成
2015/10/19 PHP
php mysql操作mysql_connect连接数据库实例详解
2016/12/26 PHP
用cookies实现的可记忆的样式切换效果代码下载
2007/12/24 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
在JavaScript中使用开平方根的sqrt()方法
2015/06/15 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
JavaScript设计模式之策略模式实现原理详解
2020/05/29 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
[16:19]教你分分钟做大人——风暴之灵
2015/03/11 DOTA
python私有属性和方法实例分析
2015/01/15 Python
python魔法方法-属性转换和类的表示详解
2016/07/22 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
Django中的cookie和session
2019/08/27 Python
Python如何使用turtle库绘制图形
2020/02/26 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
接口中的方法可以是abstract的吗
2015/07/23 面试题
学校安全教育制度
2014/01/31 职场文书
建筑总经理岗位职责
2014/02/02 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
投资协议书范本
2014/04/21 职场文书
小班上学期评语
2014/05/05 职场文书
安全技术说明书
2014/05/09 职场文书
公司禁烟通知
2015/04/23 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
公司人力资源管理制度
2015/08/05 职场文书
党员读书活动心得体会
2016/01/14 职场文书
聊聊Python中关于a=[[]]*3的反思
2021/06/02 Python
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android