【问题标题】:How can I write to Gradle logging while processing annotations?如何在处理注释时写入 Gradle 日志记录?
【发布时间】:2015-06-10 19:49:54
【问题描述】:

我有一个javax.annotation.processing.Processor 用来生成源文件。这一切都很好,但我想在构建期间向控制台写一些调试消息。我可以使用注释 Messeger 类,但这不允许我利用 Gradle 日志记录。我想要的是通过 Gradle 日志记录选项控制输出,因此 gradle -d ... 会写入调试消息、gradle -i ... 信息消息等。

有什么方法可以从我的 Java bean 处理类中获取 Gradle 记录器?

我已阅读 Gradle logging doco,并尝试使用 SLF4J 日志记录,但这只是将我的消息写入标准输出,Gradle 将其提取为 QUIET:

private static final Logger log = LoggerFactory.getLogger("org.gradle.example");

messeger.printMessage(Diagnostic.Kind.NOTE, "BeanProcessor: processing " + classElem);
log.debug("===debug=== BeanProcessor: processClass {}", classElem);
log.error("===error=== BeanProcessor: processClass {}", classElem);

21:28:22.211 [QUIET] [system.out] 21:28:22.208 [main] DEBUG com.example.beans.BeanProcessor - ===debug=== BeanProcessor: processClass com.example.beans.MyBean
21:28:22.212 [QUIET] [system.out] 21:28:22.212 [main] ERROR com.example.beans.BeanProcessor - ===error=== BeanProcessor: processClass com.example.beans.MyBean
21:28:22.216 [ERROR] [system.err] Note: BeanProcessor: processing com.example.beans.MyBean

另外,我得到的记录器是 ch.qos.logback.classic.Logger - Gradle doco 提到:“Logger ... 扩展了 SLF4J Logger 接口并添加了一些 Gradle 特定方法”,所以我希望查看一些 Gradle 特定的日志记录类。

Gradle 配置按照Annotation processor in Gradle outputs source files to build/classes making javadoc fail. How to fix it?

谢谢,

【问题讨论】:

    标签: java gradle annotation-processing


    【解决方案1】:

    可能有帮助的 hack:

    您可以创建一个新的自定义 gradle 任务,所有编译任务都依赖它,并根据 -i、-d 等是否传递给 gradle 设置系统环境变量(也许读取 logging.captureStandardOutput 的值就可以了诀窍)。

    然后在注释处理器启动时读取该环境变量,并使用它有条件地写入标准输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 2022-07-06
      • 2011-03-08
      • 2020-01-14
      • 2018-07-31
      • 2013-07-10
      • 2010-11-10
      相关资源
      最近更新 更多