java - 如何在处理注释时写入 Gradle 日志记录?

标签 java gradle annotation-processing

我有一个 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 接口(interface)并添加了一些Gradle 特定的方法”,所以我希望看到一些 Gradle 特定的日志记录类。

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

谢谢,

最佳答案

一个可能有用的技巧:

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

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

关于java - 如何在处理注释时写入 Gradle 日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29470860/

相关文章:

java - 在android中提取并显示mp3文件的专辑封面

java - 让注释处理器根据 gradle 标志忽略文件

java - 动态类加载时运行时注释扫描

java - 在java中提升数字的字符串输入

java - 如何计算最小值、最大值、总和和平均值

java - 如果方法同步,是否需要 volatile?

java - 如何包含 Dagger 2?

gradle - 如何在gradle中的所有子项目之前先执行根项目

eclipse - 我可以获得 gradle 来更新我现有的 Eclipse 项目吗?