【问题标题】:In Gradle, how to print out a message in the console / Event Log?在 Gradle 中,如何在控制台/事件日志中打印出一条消息?
【发布时间】:2017-04-14 05:15:15
【问题描述】:

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

请看下面的例子:
(抄自: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;
}

有什么方法可以将上面的targetProjDir 字符串变量显示到某种控制台或 Android Studio 中的事件日志(假设它是控制台的名称)?

【问题讨论】:

  • 我想我只是想通了,直到现在才注意到Gradle Console。一个简单的printf "Your String here..." 似乎可以解决问题。
  • ^ 话虽如此,每次我运行任何“assemble...”、“build...”或“deploy...”Gradle 命令时,它似乎都会连续打印两次。什么可能导致重复打印?
  • System.out.println(message);
  • 我得说,我很惊讶这个问题直到今天仍然有很多访问/投票!可以想象到现在会有更好的替代方案/简化的 Android 构建工作流程。很高兴这个问题对其他人有所启发!祝你好运!

标签: android android-studio gradle logging build.gradle


【解决方案1】:

Gradle 使用了一个日志框架。您可以向其中记录消息。默认只显示lifecycle及以上的日志级别,但您可以在debug和info等其他级别进行日志。

在调试级别登录(在使用 gradle --debug 或更低版本的构建中可见)

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

在信息级别记录(gradle --info 及更低版本可见)

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

在生命周期级别记录(默认可见)

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

【讨论】:

  • 如果您只想记录一些内容而不配置任何内容,请按照@JbirdVegas 的建议使用project.logger.lifecycle('my message visible by default')。您可以在 Gradle 控制台 选项卡中查看日志。
【解决方案2】:

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

【讨论】:

  • println 不会通过日志框架进行日志记录,它是一种转发到System.out.println(String) 方法的方法。这将始终不只是在特定的日志级别打印。
  • groovy 中println 方法的参考:docs.groovy-lang.org/latest/html/api/groovy/lang/…
  • 取自 Gradle 版本 3.2.1 的发行说明。我会更新我的答案
  • @JBird:“Gradle 将任何写入标准输出的内容重定向到 QUIET 日志级别的日志系统。” (docs.gradle.org/current/userguide/logging.html,用于 Gradle 4.2.1)。所以根据这个文档,println 将通过日志框架进行日志记录。但是,我无法在实践中成功测试。
  • 这适用于 Android Studio,而接受的解决方案却没有
【解决方案3】:

基本上你可以通过这个gradle脚本打印出一条消息-

 println "This is a simple gradle message"

但是如果你想在消息中打印一个变量,那么你可以通过下面的代码来完成

def variable = "This is a simple variable"

println "Message: ${variable}"

【讨论】:

    【解决方案4】:

    这适用于我的 Android Studio:

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

    【讨论】:

      【解决方案5】:

      这适用于 Kotlin DSL (build.gradle.kts) 和 Gradle 7.4。

      当您使用println(标准输出)时,它被重定向到日志级别QUIET。所以,它总是打印在所有日志级别(当没有指定日志级别时,Gradle 默认为LIFECYCLE):

      println("I am a log message.")
      

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

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

      以下是 Gradle 中可用的日志级别以及如何从命令行启用它们:

      Order Name Command line option Levels outputted
      6 ERROR does not have option (always printed) ERROR
      5 QUIET -q or --quiet QUIET and higher
      4 WARNING -w or --warn WARNING and higher
      3 LIFECYCLE when no option is provided LIFECYCLE and higher
      2 INFO -i or --info INFO and higher
      1 DEBUG d or --debug DEBUG and higher

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

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

      请参阅Gradle official documentations 了解有关日志记录的更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 2016-02-14
        • 1970-01-01
        相关资源
        最近更新 更多