Logback中文网:Logback学习笔记(四)配置Logback(2)

一、指定logback加载配置文件的路径

前文讲到,logback在启动时会自动加载放在类路径下的配置文件,那么有没有一种配置,让Logback在启动时加载我们指定位置的配置文件呢,答案是肯定的。

我们通过系统属性 logback.configurationFile 可以指定默认的配置文件的路径。它的值可以是 URL,类路径下的文件或者是应用外部的文件。

通过命令行配置:

java -Dlogback.configurationFile=/path/to/config.xml chapters.configuration.MyApp1

注意文件类型只能是 ".xml" 文件或者 ".groovy" 文件,其他的扩展文件将会被忽略。

因为 logback.configurefile 是系统属性,所以也可以在应用内进行设置。但必须在logger实例创建之前进行设置。

public class TestLogback01 {
    //指定配置文件路径
    static{
        System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY,"src/main/resources/logback.xml");
    }
    private static Logger logger = LoggerFactory.getLogger(TestLogback01.class);

    @Test
    public void test(){
        logger.info("info....");
    }
}

二、配置文件自动热加载

有时候我们可能对配置文件进行更改,为了让logback能够;快速的感知到配置文件的改变,我们可以在<configuration>标签上添加 scan="true" 属性。

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" >
    ...
</configuration>

添加scan属性后,logback默认一分钟扫描一次配置文件看看是否更改。通过<configuration>标签上的 scanPeriod 属性可以指定扫描周期,单位可以是毫秒、秒、分钟或者小时。如果没有指定时间单位,默认是毫秒。

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
    ...
</configuration>

当设置scan="true"时,会新建一个 ReconfigureOnChangeTask 任务,用于监视配置文件是否变化。ReconfigureOnChangeTask 也会自定监视外部文件的变化,如果更改后的配置文件有语法错误,则会回退到之前的配置文件。

三、在堆栈中展示包数据

在logback-1.1.4之后,展示包数据是默认禁用的。

如果启用了展示包数据,logback 会在堆栈的每一行显示 jar 包的名字以及 jar 的版本号。展示包数据可以很好的解决 jar 版本冲突的问题。但是,这个的代价比较高,特别是在频繁报错的情况下。

<configuration packagingData="true">
    ...
</configuration>

也可以通过 LoggerContext 的 setPackagingDataEnabled(boolean) 方法来开启

 LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
 lc.setPackagingDataEnabled(true);

四、直接调用JoranConfiguration

Joran 是 logback 使用的一个配置加载库,如果想要重新实现 logback 的配置机制,可以直接调用这个类JoranConfigurator来实现:

package test.java.TestLogback;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import ch.qos.logback.access.joran.JoranConfigurator;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.joran.spi.JoranException;
import ch.qos.logback.core.util.StatusPrinter;

public class Configurator {

    private static final Logger LOGGER = LoggerFactory.getLogger(Configurator.class);

    public static void main(String[] args) {

        LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory();
        JoranConfigurator joranConfigurator = new JoranConfigurator();
        joranConfigurator.setContext(context);
        context.reset();
        try {
            joranConfigurator.doConfigure(args[0]);
        } catch (JoranException e) {
            e.printStackTrace();
        }

        StatusPrinter.printInCaseOfErrorsOrWarnings(context);

        LOGGER.info("Entering application");

        LOGGER.info("Exiting application");
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值