控制 gradle 插件中使用的第三方库的日志记录输出
Control logging output from third-party libraries used in a gradle plugin
我有一个使用库的 gradle 插件。该库使用 archaius,它最终使用 sl4j 记录一些信息。
当我从我的插件执行一个任务时,它最终使用了这个库,然后它最终使用了 archaius。这意味着我开始看到所有这些来自 archaius 的日志消息。有什么办法可以关闭它吗?
我尝试过的事情:
- 正在将插件的应用方法的日志级别设置为
LIFECYCLE
/QUIET
。
- 使用
com.netflix.level = QUIET
将 logging.properties
文件添加到插件的 src/main/resources
。
以上均无效。有没有办法禁用这些日志消息?
我知道怎么做了。不幸的是,它取决于 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())
这样做是行不通的。
我有一个使用库的 gradle 插件。该库使用 archaius,它最终使用 sl4j 记录一些信息。
当我从我的插件执行一个任务时,它最终使用了这个库,然后它最终使用了 archaius。这意味着我开始看到所有这些来自 archaius 的日志消息。有什么办法可以关闭它吗?
我尝试过的事情:
- 正在将插件的应用方法的日志级别设置为
LIFECYCLE
/QUIET
。 - 使用
com.netflix.level = QUIET
将logging.properties
文件添加到插件的src/main/resources
。
以上均无效。有没有办法禁用这些日志消息?
我知道怎么做了。不幸的是,它取决于 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())
这样做是行不通的。