配置文件的加载

顺序依次:

  1. classpath下的logback-test.xml
  2. classpath下的logback.groovy
  3. classpath下的logback.xml
  4. 通过SPI机制加载META-INF/services/com.qos.logback.classic.spi.Configurator文件,里面写配置类的全限定类名
  5. 以上都没有则使用自带的BasicConfigurator配置一个控制台输出日志的配置

设置其他方式加载配置文件

  1. 通过vm参数指定配置文件 -Dlogback.configurationFile=/path/to/config.xml
  2. 通过代码内设置
    System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "/path/to/config.xml");

打印配置初始化信息

  1. 手动打印
public static void main(String[] args) {
  Logger logger = LoggerFactory.getLogger("ROOT");
  logger.info("internal info");
  // assume SLF4J is bound to logback in the current environment
  LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
  // print logback's internal status
  StatusPrinter.print(lc);
  ...
}
  1. 自动打印
<configuration debug="true">
      ...
</configuration>
  1. StatusListener方式

自带的有OnConsoleStatusListener,也可以自己实现

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

自动扫描更改并且更新配置文件

设置scan为true,则会启动ReconfigureOnChangeTask按照指定周期更新配置。

<configuration scan="true" scanPeriod="30 seconds" > 
  ...
</configuration>
/**
 * @author zhanghongguo@sensorsdata.cn
 * @since 2020/12/02 19:54
 */
public class ScanConfigModifySample {
  public static void main(String[] args) throws InterruptedException {
    Logger logger = LoggerFactory.getLogger(ScanConfigModifySample.class);
    while (true) {
      logger.info("scan period by 1 seconds");
      Thread.sleep(2000);
    }
  }
}

然后修改编译后的target/的配置文件,自动更新。

启用在堆栈跟踪中显示Jar包信息

也就是在打印除了打印堆栈信息外还会显示这一栈信息中属于哪个jar包合jar包的版本信息。这个计算代价很高,特别是在异常频繁发生的情况下。

  1. 配置中启用
<configuration packagingData="true">
  ...
</configuration>
  1. 代码中启用
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
lc.setPackagingDataEnabled(true);

停止日志记录

代码控制直接停止日志记录器。

LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger logger = context.getLogger("ROOT");
logger.info("stop start");
context.stop();
//不显示
logger.info("is stop?");

注册日志停止记录的shutdownHook,在独立的Java应用程序中,向配置文件中添加指令是确保JVM退出之前允许任何正在进行的压缩任务完成的简便方法,在web应用中,这个会自动注册,shutdownHook />指令是多余的。

可以通过class来指定自己的showdownHook

<configuration debug="true">
   <shutdownHook/>
  .... 
</configuration>

参考

Chapter 3: Logback configuration

博客
分类
标签
归档
关于