Logback中Configuration配置文件的小知识

配置文件的优先级

  1. 优先找classPath下的logback-test.xml文件。
  2. 如果找不到,再找classPath下的logback.groovy文件。
  3. 如果找不到,再找classPath下的logback.xml 文件。
  4. 如果找不到,再找SPI机制下com.qos.logback.classic.spi.Configurator接口的实现类。
  5. 如果没有SPI机制下com.qos.logback.classic.spi.Configurator接口的实现类,使用logback中的默认实现类BasicConfigurator。它将日志内容输出到控制台上。

在这里插入图片描述

这里再额外说明下,如果你使用java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1这种方式启动,则可以使用你想要的任意配置文件创建logContext,这在帮助你学习logback时是非常有用的。

configuration的debug属性

<configuration debug="true"> 

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are  by default assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

debug属性,会使应用启动时在控制台上打印出 context上下文的加载处置情况。等效于代码StatusPrinter.print(logContext), 也等效于配置文件中配置statusListener标签,如下

<configuration>
  <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />  

  ... the rest of the configuration file  
</configuration>

在这里插入图片描述
当然,logback.debug系统属性生效优先级高于配置文件debug属性,但是这是基于存在配置文件的前提下的, 参考一下logback历史上一个修复的issue。我们看看logback内部加载行为状态是什么样的。

21:28:23,474 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
21:28:23,474 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
21:28:23,475 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/Users/ruchen/IdeaProjects/java-framework/java-logback/target/classes/logback.xml]
21:28:23,547 |-INFO in ch.qos.logback.core.joran.action.ImplicitModelAction - Assuming default class name [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for tag [encoder]
21:28:23,548 |-INFO in ch.qos.logback.core.joran.action.ImplicitModelAction - Assuming default class name [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for tag [encoder]
21:28:23,548 |-INFO in ch.qos.logback.core.joran.action.ImplicitModelAction - Assuming default class name [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for tag [encoder]
21:28:23,625 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler@17ed40e0 - Setting level of logger [CONSOLE_LOGGER] to DEBUG
21:28:23,625 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler@50675690 - Setting level of logger [CONSOLE_LOGGER1] to DEBUG
21:28:23,625 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler@31b7dea0 - Setting level of ROOT logger to DEBUG
21:28:23,626 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@47d384ee - Processing appender named [ROOT]
21:28:23,626 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@47d384ee - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
21:28:23,649 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@1784662007 - No compression will be used
21:28:23,651 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy@1784662007 - Will use the pattern logback.log.%d{yyyy-MM-dd} for the active file
21:28:23,654 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'logback.log.%d{yyyy-MM-dd}'.
21:28:23,654 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
21:28:23,656 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Sat Dec 05 21:18:32 CST 2020
21:28:23,669 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ROOT] - Active log file name: logback.log
21:28:23,669 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ROOT] - File property is set to [logback.log]
21:28:23,669 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@47d384ee - Attaching appender [ROOT] to Logger[ROOT]
21:28:23,670 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@13c78c0b - Processing appender named [CONSOLE]
21:28:23,670 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@13c78c0b - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
21:28:23,672 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@13c78c0b - Attaching appender [CONSOLE] to Logger[CONSOLE_LOGGER]
21:28:23,672 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@337d0578 - Processing appender named [CONSOLE1]
21:28:23,672 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@337d0578 - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
21:28:23,672 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler@337d0578 - Attaching appender [CONSOLE1] to Logger[CONSOLE_LOGGER1]
21:28:23,675 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@6276ae34 - End of configuration.
21:28:23,675 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@5cc7c2a6 - Registering current configuration as safe fallback point

configuration的scan属性

logback配置文件一旦发生变化,logback支持重新加载文件,这是基于logback框架中一个后台线程实现的。默认情况下,logback一分钟加载一次,你可以改写,比如通过下面的方式

<configuration scan="true" scanPeriod="30 seconds" > 
</configuration> 

appender累积规则

level继承规则

在这里插入图片描述

在这里插入图片描述

logger的additivity属性

<configuration>

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>foo.log</file>
    <encoder>
      <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>

  <logger name="chapters.configuration.Foo" additivity="false">
    <appender-ref ref="FILE" />
  </logger>

  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

默认情况下,logger的additivity属性为true。就图中这个配置文件,如果不配置该属性为false,会导致 name声明为 chapters.configuration.Foo的logger在输出日志时 控制台 和 文件各输出一份,因为logger存在继承行为。

当该属性为false时,直接阻断了logger中appender的累加行为(cumulative behaviour),声明 name声明为 chapters.configuration.Foo的logger不再输出到console,只有文件。

变量替代&作用域

变量替代比较常见,不再赘述。作用域提一下,scope主要有local, context,system
优先级 local > context > system, 也就是说优先取local中的变量值,找不到才找context,最后找system。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值