非spring框架应用使用logback配置日志

熟悉springboot应用开发得技术人员都知道logback配置文件要生效,只需要创建logback.xml或者logback-spring.xml文件放到对应工程src/main/resources目录下启动应用即可。然而当脱离了spring这个全家桶之后,单纯的java maven工程要使用logback日志组件加载配置却不是那么得熟练了。本文简单分享下这块相关得配置。

本人得需求本很简单,使用java语言开发了个SDK工具包,当执行junit单元测试用例得时候,写在逻辑里的日志却打印不出来。先后做了下面的实验,最终还是实现了。
第一步、没有日志配置文件,要让控制台打印日志几乎不可能。
于是在src/main/resources下新建了logback.xml文件

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date{yyyy-MM-dd HH:mm:ss} %level %msg%npattern>
        encoder>
    appender>

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

运行用例,没有任何效果。

第二步、想起springboot应用框架本身会自动加载配置日志配置文件,然而咱这块并没有引入spring框架。
于是找如何让非spring工程在单元测试中添加logback配置文件,有人给出下面的方案:

@BeforeClass
    public static void setupLogger() {
        // 创建 LoggerContext,并通过 JoranConfigurator 加载 logback.xml 配置文件
        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
        context.reset();
        JoranConfigurator configurator = new JoranConfigurator();
        configurator.setContext(context);
        try {
            configurator.doConfigure("logback.xml");
        } catch (Exception e) {
            // 配置加载失败
            e.printStackTrace();
        }

        // 打印 Logback 内部状态,可以检查配置是否成功加载
        StatusPrinter.printInCaseOfErrorsOrWarnings(context);
    }

感叹命运不公呢,执行用例报logback.xml不存在,改为classpath:logback.xml也没用。

第三步、官方应该不会骗人,于是找到了下面得答案

    @BeforeClass
    public static void setupLogger() {
        System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY,"logback.xml");
    }

短小精悍,一针见血。执行用例发现生效了。

你可能感兴趣的:(spring,logback,java)