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能够;快速的感知到配置文件的改变,我们可以在标签上添加 scan="true" 属性。



    ...

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



    ...

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

三、在堆栈中展示包数据

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

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


    ...

也可以通过 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");
    }
}

 

你可能感兴趣的:(日志,Logback)