Chapter 18. Logging 日志

    Table 18.1. Log levels






















    在 Table 18.2, “Log level command-line options” 中命令行,是用来选择不同的级别的选项。 Table 18.3, “Stacktrace command-line options” 中的是影响堆栈跟踪日志

    Table 18.2. Log level command-line options
















    Table 18.3. Stacktrace command-line options













    在构建文件,打印日志的一个简单方法是把消息写到标准输出中。Gradle 会把写到标准输出的所有内容重定向到它的日志系统的 QUIET 级别中。

    Example 18.1. Using stdout to write log messages

    build.gradle

    Gradle 还提供了一个 logger 属性给构建脚本,它是一个 Logger 实例。该接口扩展自 SLF4J 的 Logger接口,并添加了几个 Gradle 的特有方法。下面是关于如何在构建脚本中使用它的示例:

    build.gradle

    1. logger.quiet('An info log message which is always logged.')
    2. logger.warn('A warning log message.')
    3. logger.lifecycle('A lifecycle info log message.')
    4. logger.info('An info log message.')
    5. logger.debug('A debug log message.')
    6. logger.trace('A trace log message.')

    您也可以在构建脚本中通过其他使用的类挂钩到 Gradle 的日志系统中(例如 buildSrc 目录中的类)。只需使用一个 SLF4J 的logger对象。你可以在构建脚本中,用与内置的logger同样的方式使用这个logger。

    Example 18.3. Using SLF4J to write log messages

    build.gradle

    Gradle 内部使用 Ant 和 Ivy。它们都有自己的日志系统。Gradle 将他们日志输出重定向到 Gradle 的日志系统。从 Ant/Ivy 的日志级别到 Gradle 的日志级别是一对一的映射,除了 Ant/Ivy 的 TRACE 级别,它是映射到 Gradle 的 DEBUG 级别的。这意味着默认情况下, Gradle 日志级别将不会显示任何 Ant/Ivy 的输出,除非是错误或警告信息。

    有很多的工具仍然在使用标准输出日志记录。默认情况下,Gradle 将标准输出重定向到 QUIET日志级别,把标准错误输出重写向到 ERROR 级别。这种行为是可配置的。Project 对象提供了一个 ,它允许您在计算构建脚本时,修改标准输出和错误重定向的日志级别。

    Example 18.4. Configuring standard output capture

    build.gradle

    1. println 'A message which is logged at INFO level'

    Example 18.5. Configuring standard output capture for a task

    build.gradle

    Gradle 还提供了对 Java Util Logging,Jakarta Commons Logging 和 Log4j 的日志工具的集成。你生成的类使用这些日志记录工具输出的任何日志消息,都将被重定向到 Gradle 的日志系统。

    您可以用您自己的 logging UI 大量地替换 Gradle 的。你可以这样做,例如,如果您想要以某种方式自定义 UI ——以输出更多或更少的信息,或修改日志格式您可以使用 Gradle.useLogger() 方法替换这个 logging。它可以在构建脚本,或 init 脚本,或通过内嵌的 API 访问。请注意它完全禁用 Gradle 的默认输出。下面是一个示例,在 init 脚本中修改任务执行和构建完成的日志打印。

    Example 18.6. Customizing what Gradle logs

    init.gradle

    1. useLogger(new CustomEventLogger())
    2. class CustomEventLogger extends BuildAdapter implements TaskExecutionListener {
    3. public void beforeExecute(Task task) {
    4. }
    5. public void afterExecute(Task task, TaskState state) {
    6. println()
    7. public void buildFinished(BuildResult result) {
    8. println 'build completed'
    9. if (result.failure != null) {
    10. result.failure.printStackTrace()
    11. }
    12. }

    执行 gradle -I init.gradle build

    你的 logger 可以实现下面列出的任何监听器接口。当你注册一个 logger时,只能替换它实现的接口的日志记录。其他接口的日志记录是不变的。你可以在 The Build Lifecycle 构建生命周期中的 55.6 节 “在构建脚本中响应生命周期”查看相关信息。