【问题标题】:Control logging output from third-party libraries used in a gradle plugin控制 gradle 插件中使用的第三方库的日志记录输出
【发布时间】:2016-04-22 19:47:24
【问题描述】:

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

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

我尝试过的事情:

  • 将插件应用方法的日志级别设置为LIFECYCLE/QUIET
  • logging.properties 文件添加到插件的src/main/resourcescom.netflix.level = QUIET

以上都不起作用。有没有办法禁用这些日志消息?

【问题讨论】:

    标签: java logging gradle gradle-plugin


    【解决方案1】:

    我想出了怎么做。不幸的是,它取决于 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 使用的记录器工厂实现,重置它,然后提供一个新的输出事件侦听器。用project.gradle.useLogger(new StfuLogger()) 这样做是行不通的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 2014-12-25
      • 2011-06-24
      • 2010-10-02
      • 1970-01-01
      相关资源
      最近更新 更多