控制gradle插件中使用的第三方库的日志记录输出

时间:2016-04-22 19:47:24

标签: java logging gradle gradle-plugin

我有一个使用库的gradle插件。该库使用archaius,最终使用sl4j记录一些信息。

当我从我的插件执行任务时,它最终使用此库,然后最终使用archaius。这意味着我开始看到来自archaius的所有这些日志消息。有什么办法可以解决这个问题吗?

我尝试过的事情:

  • 从插件的应用方法设置日志级别LIFECYCLE / QUIET
  • 使用logging.propertiessrc/main/resources文件添加到插件com.netflix.level = QUIET

上述两种方法均无效。有没有办法禁用这些日志消息?

1 个答案:

答案 0 :(得分:0)

我想出了怎么做。不幸的是,这取决于gradle中的内部类,但我无法想出任何其他方式:

void apply(Project project) {
    OutputEventListenerBackedLoggerContext context = (OutputEventListenerBackedLoggerContext)  LoggerFactory.getILoggerFactory();

    context.reset()
    context.setOutputEventListener(new StfuLogger())
}


class StfuLogger implements OutputEventListener {
    @Override
    void onOutput(OutputEvent event) {
        LogEvent logEvent = (LogEvent) event
        if(!logEvent.category.contains("com.netflix")) {
            println(logEvent.message)
        }
    }
}

这个想法是获取gradle使用的logger工厂实现,重置它,然后提供一个新的输出事件监听器。使用project.gradle.useLogger(new StfuLogger())执行此操作无效。

相关问题