在Gradle中,如何在控制台/事件日志中打印出一条消息?

125

我正在尝试验证当我执行部署命令时,我的源路径和目标路径是否正确设置。

请参见以下示例:
(摘自:http://eppz.eu/blog/unity-android-plugin-tutorial-2/)

android.libraryVariants.all { variant ->
    // Task names.
    String variantName = "${variant.name.capitalize()}"; // Like 'Debug'
    String deployTaskGroup = "plugin";
    String deployTaskName = "deploy${variantName}PluginArchive"; // Like 'deployDebugPluginArchive'
    String dependencyTaskName = "assemble${variantName}"; // Like 'assembleDebug'
    // Source.
    String sourceAARFolder = "${buildDir.getPath()}/outputs/aar/";
    String sourceAARName = "${project.name}-${variant.name}.aar";
    // Target.
    String targetAssetFolder = "Assets/Plugins/My Plugin";
    String targetAARFolder = "${rootDir.getPath()}/../../${targetAssetFolder}"; // Navigate into 'Assets'
    String targetAARName = "My Plugin Android.aar"; // The form you ship your plugin

    String targetProjDir = System.env.UNITY_PROJECT; // <-- Need to confirm this line!
    //Log.i(targetProjDir); //??????????? something like this?

    // Create task.
    task(deployTaskName, dependsOn: dependencyTaskName, type: Copy) {
        from(sourceAARFolder)
        into(targetAARFolder)
        include(sourceAARName)
        rename(sourceAARName, targetAARName)
    }.group = deployTaskGroup;
}
有没有办法在Android Studio的控制台(假设名称为“console”)中显示上述 targetProjDir 字符串变量,或者事件日志中显示它?

有没有办法将上述 targetProjDir 字符串变量显示在Android Studio的“控制台”或事件日志中?


我想我刚刚弄明白了,之前没有注意到Gradle控制台。一个简单的printf "你的字符串在这里..."似乎就可以解决问题了。 - chamberlainpi
话虽如此,但每次运行任何“assemble...”、“build...”或“deploy...”Gradle命令时,它似乎总是连续打印两次。是什么导致了重复打印? - chamberlainpi
1
System.out.println(message); - Rajesh
我得说,我很惊讶这个问题至今仍然得到了相当多的访问/投票!本以为现在已经有更好的替代方案/简化的Android构建工作流程了。很高兴这个问题能给其他人一些启示!祝你好运! - chamberlainpi
@chamberlainpi 为什么你没有接受一个答案? - The incredible Jan
6个回答

161

Gradle 使用日志框架。您可以向其中记录消息。默认情况下,仅显示等级为 lifecycle 及以上的日志,但您可以记录其他等级的日志,例如 debuginfo

要记录调试级别的日志(在使用 gradle --debug 或更低版本进行构建时可见)

project.logger.debug('my debug message')

记录信息级别日志(可在gradle --info构建及更低级别下查看)

project.logger.info('my info message')

记录生命周期级别的日志(默认可见)

project.logger.lifecycle('my message visible by default')

3
如果您只想记录某些内容而不进行任何配置,请使用 project.logger.lifecycle('my message visible by default'),就像 @JbirdVegas 建议的那样。您可以在 Gradle console 标签中查看日志。 - vovahost

81

Gradle脚本是用Groovy语言编写的。您可以在控制台中记录自己的消息。

如果您的项目的Gradle版本3.2.1或更高版本,则有一个简单的选项可以在构建文件中记录日志,即将消息写入标准输出。 Gradle会将任何写入标准输出的内容重定向到其日志系统。

示例

println 'A message which is logged at QUIET level'

Gradle日志系统允许我们将消息记录到多个日志级别(LIFECYCLE、QUIET、INFO、DEBUG)中。

请点击下面的链接进行详细学习:

https://docs.gradle.org/current/userguide/logging.html


2
println虽然是一个方法,但它不会记录日志。它只是将调用转发到System.out.println(String)方法。这将始终打印输出,而不仅仅是在特定的日志级别下。 - JBirdVegas
1
Groovy中println方法的参考文献:http://docs.groovy-lang.org/latest/html/api/groovy/lang/Script.html#println() - JBirdVegas
2
@JBird: "Gradle将标准输出的任何内容重定向到其日志记录系统,以QUIET日志级别记录。"(https://docs.gradle.org/current/userguide/logging.html,适用于Gradle 4.2.1)。因此根据此文档,println 通过日志框架进行记录。但是,我在实践中尚未能够成功测试此功能。 - LarsH
这在Android Studio上有效,而被接受的解决方案则无效。 - Chisko
1
@Chisko 目前还没有被接受的答案。你指的是哪一个,为什么它不起作用?为什么你没有在那里发表评论? - The incredible Jan
显示剩余2条评论

25

基本上,您可以通过这个Gradle脚本打印一条消息 -

 println "This is a simple gradle message"

但是如果你想在消息中打印一个变量,那么可以使用以下代码

def variable = "This is a simple variable"

println "Message: ${variable}"

13
这是针对 Kotlin DSL (build.gradle.kts) 和 Gradle 7.4 的。当你使用 println(标准输出)时,它被重定向到日志级别 QUIET。因此,在所有日志级别下(当未指定日志级别时,Gradle 默认为 LIFECYCLE),始终会打印出来:
println("I am a log message.")

您还可以隐式使用脚本中提供的projectlogger属性:

logger.info("I am an {} log message", "info")
// OR
project.logger.info("I am an {} log message", "info")

以下是Gradle中可用的日志级别以及如何从命令行启用它们:
顺序 名称 命令行选项 输出级别
6 错误 没有选项(始终打印) 错误
5 静默 -q--quiet 静默 及以上
4 警告 -w--warn 警告 及以上
3 生命周期 未提供选项时 生命周期 及以上
2 信息 -i--info 信息 及以上
1 调试 -d--debug 调试 及以上

您还可以在gradle.properties文件中设置日志级别:

org.gradle.logging.level=quiet|warn|lifecycle|info|debug

请参阅Gradle官方文档以了解更多关于日志记录的内容。


9

这对我在Android Studio中有效:

println("Log: current build type is $buildTypeName")

3

您可以创建自己的任务并将值打印到控制台。

tasks.create("nameOfTest"){
    println("Print anything")
}

你可以从终端运行上述任务

./gradlew nameOfTest

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接