【Logback】<configuration>标签详解

一、Logback概述

logback是log4j的继承者,其分为三个模块:

模块名说明
logback-core基础模块,可以在此模块的基础上构建自己的模块
logback-classic1、通化并升级改良log4j
2、实现slf4j的API,方便日志框架的切换
logback-access集成Servlet容器,提供HTTP访问日志的功能

二、configuration属性

2.1、使用示例

<configuration scan="true" scanPeriod="60 seconds" debug="false">
</configuration>

2.2、参数说明

属性可选值说明备注
scantrue|false开启扫描,配置变更时logback自动更新配置默认空,即false
scanPeriod30 (|milli(second)?|second(e)?|minute|hour|day)s?扫描间隔: 数字 + 空格 + 日期单位默认一分钟
若不指定时间单位,默认毫秒
debugtrue|false注册OnConsoleStatusListener的简写模式,控制台输出logback内部日志默认false
packagingDatatrue|false每行日志都输出包信息其所在jar包信息对性能影响较大,1.1.4及以上版本默认false

2.3、解析

scan源码:ch.qos.logback.classic.joran.action.ConfigurationAction

package ch.qos.logback.classic.joran.action;
// ..............

public class ConfigurationAction extends Action {
    static final String INTERNAL_DEBUG_ATTR = "debug";
    static final String PACKAGING_DATA_ATTR = "packagingData";
    static final String SCAN_ATTR = "scan";
    static final String SCAN_PERIOD_ATTR = "scanPeriod";
    
    // ....scan....
    void processScanAttrib(InterpretationContext ic, Attributes attributes) {
        String scanAttrib = ic.subst(attributes.getValue(SCAN_ATTR));
        // 
        if (!OptionHelper.isEmpty(scanAttrib) && !"false".equalsIgnoreCase(scanAttrib)) {

            ScheduledExecutorService scheduledExecutorService = context.getScheduledExecutorService();
            URL mainURL = ConfigurationWatchListUtil.getMainWatchURL(context);
            if (mainURL == null) {
                addWarn("Due to missing top level configuration file, reconfiguration on change (configuration file scanning) cannot be done.");
                return;
            }
            ReconfigureOnChangeTask rocTask = new ReconfigureOnChangeTask();
            rocTask.setContext(context);

            context.putObject(CoreConstants.RECONFIGURE_ON_CHANGE_TASK, rocTask);

            String scanPeriodAttrib = ic.subst(attributes.getValue(SCAN_PERIOD_ATTR));
            Duration duration = getDuration(scanAttrib, scanPeriodAttrib);

            if (duration == null) {
                return;
            }

            addInfo("Will scan for changes in [" + mainURL + "] ");
            // Given that included files are encountered at a later phase, the complete list of files 
            // to scan can only be determined when the configuration is loaded in full.
            // However, scan can be active if mainURL is set. Otherwise, when changes are detected
            // the top level config file cannot be accessed.
            addInfo("Setting ReconfigureOnChangeTask scanning period to " + duration);

            ScheduledFuture<?> scheduledFuture = scheduledExecutorService.scheduleAtFixedRate(rocTask, duration.getMilliseconds(), duration.getMilliseconds(),
                            TimeUnit.MILLISECONDS);
            context.addScheduledFuture(scheduledFuture);
        }
    }

    // ........
}

2.4、示例

debug=true ,示例

13:33:04.002  WARN --- [     http-nio-8080-exec-2] c.qbhj.logback.controller.LogController  : warn......warn......
13:33:04.003  INFO --- [     http-nio-8080-exec-2] c.qbhj.logback.controller.LogController  : info......info......
13:33:04.003 ERROR --- [     http-nio-8080-exec-2] c.qbhj.logback.controller.LogController  : error......error......error......

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓   以下为debug=true输出的logback内部日志   ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
13:33:04,003 |-INFO in c.q.l.co.rolling.helper.RenameUtil - Renaming file [logs\case-logback\case-springboot-logback.error.log] to [logs\case-logback\history\case-springboot-logback.error.2023-03-18-13-32.0.log59129593988100.tmp]
13:33:04,005 |-INFO in ch.qos.logback.core.rolling.helper.Compressor - GZ compressing [logs\case-logback\history\case-springboot-logback.error.2023-03-18-13-32.0.log59129593988100.tmp] as [logs\case-logback\history\case-springboot-logback.error.2023-03-18-13-32.0.log.gz]
13:33:04,006 |-INFO in c.q.l.core.rolling.helper.TimeBasedArchiveRemover - Removed  0 Bytes of files

packagingData=true,示例如下:

14:28:48.835 [btpool0-7] INFO  c.q.l.demo.prime.PrimeAction - 99 is not a valid value
java.lang.Exception: 99 is invalid
  at ch.qos.logback.demo.prime.PrimeAction.execute(PrimeAction.java:28) [classes/:na]
  at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) [struts-1.2.9.jar:1.2.9]
  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236) [struts-1.2.9.jar:1.2.9]
  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432) [struts-1.2.9.jar:1.2.9]
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) [servlet-api-2.5-6.1.12.jar:6.1.12]
  at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502) [jetty-6.1.12.jar:6.1.12]
  at ch.qos.logback.demo.UserServletFilter.doFilter(UserServletFilter.java:44) [classes/:na]
  at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1115) [jetty-6.1.12.jar:6.1.12]
  at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:361) [jetty-6.1.12.jar:6.1.12]
  at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417) [jetty-6.1.12.jar:6.1.12]
  at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) [jetty-6.1.12.jar:6.1.12]

日志最后展示日志输出类的包信息,如 [struts-1.2.9.jar:1.2.9]

三、configuration子节点

3.1、configuration文件语法(节点配置)

如下(图片摘自官网):
摘自官网

3.2、变量

3.2.1、变量定义

  1. 语法:

<property>
<variable>

低版本可以通过<property> 来定义,1.0.7版本后可以通过<variable>等同于<property>,二者一样

  1. 使用示例:
<!-- 定义 -->
<variable name="USER_HOME" value="/home/sebastien" />
<property name="USER_HOME1" value="/home/sebastien" />
<!-- 引用外部配置 -->
<variable file="src/main/java/chapters/configuration/variables1.properties" />
<variable resource="resource1.properties" />

3.2.2、变量引用/使用

  1. 语法:

使用: ${变量名}

指定默认值:以:- 分隔 ${name:-value}

  1. 示例:
<!-- 变量引用,语法: ${变量名} -->
<file>${USER_HOME}</file>
<!-- 指定默认值为 default-user,语法 ":-默认值"-->
<file>${USER_HOME:-default-user}</file>

3.3、<logger>、<root>详解

【Logback】<logger>、<root>标签详解

3.4、<appender>节点

【Logback】<appender>标签详解

四、参考资料

https://logback.qos.ch/manual/configuration.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值