熟悉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%n</pattern>
</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");
}
短小精悍,一针见血。执行用例发现生效了。