有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com/1.12/userguide/userguide.html

本文原创,转载请注明出处:http://blog.csdn.net/maosidiaoxian/article/details/41241915

关于我对Gradle的翻译,以Github上的项目及http://gradledoc.qiniudn.com 上的文档为准。如有发现翻译有误的地方,将首先在以上两个地方更新。因时间精力问题,博客中发表的译文基本不会同步修改。

第十八章. 日志

日志是构建工具的主要界面。如果日志太多,真正的警告和问题容易被隐藏。另一方面,如果出了错,你需要找出相关的信息。Gradle 定义了6个日志级别,如
18.1,“日志级别”
所示。除了那些您通过可能会看到的日志级别之外,有两个 Gradle 特定日志级别。这两个级别分别是 QUIET 和 LIFECYCLE.
默认使用后面的这个日志级别,用于报告构建进度。

表 18.1. 日志级别

Level 用于
ERROR 错误消息
QUIET 重要的信息消息
WARNING 警告消息
LIFECYCLE 进度信息消息
INFO 信息性消息
DEBUG 调试消息

18.1.
选择一个日志级别

您可以使用
18.2,“日志级别的命令行选项”
中所示的命令行开关来选择不同的日志级别。在
18.3,“栈跟踪的命令行选项”
中,你可以看到影响栈跟踪日志的命令行开关。

表 18.2. 日志级别的命令行选项

选项 输出日志级别
没有日志选项 LIFECYCLE 及更高
-q or --quiet QUIET 及更高
-i or --info INFO 及更高
-d or --debug DEBUG 及更高

表 18.3. 栈跟踪的命令行选项

选项 意义
没有栈跟踪选项 构建错误(如编译错误)时没有栈跟踪打印到控制台。只有在内部异常的情况下才打印栈跟踪。如果选择 DEBUG 日志级别,则总是输出截取后的栈跟踪信息。
-s or --stacktrace 输出截断的栈跟踪。我们推荐使用这一个选项而不是打印全栈的跟踪信息。Groovy 的全栈跟踪非常冗长 (由于其潜在的动态调用机制,然而他们通常不包含你的的代码中哪里错了的相关信息。)
-S or--full-stacktrace 打印全栈的跟踪信息。

18.2.
编写自己的日志消息

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

示例18.1. 使用标准输出写日志

build.gradle

println 'A message which is logged at QUIET level'

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

示例 18.2. 编写自己的日志消息

build.gradle

logger.quiet('An info log message which is always logged.')
logger.error('An error log message.')
logger.warn('A warning log message.')
logger.lifecycle('A lifecycle info log message.')
logger.info('An info log message.')
logger.debug('A debug log message.')
logger.trace('A trace log message.')

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

示例 18.3. 使用 SLF4J 编写日志消息

build.gradle

import org.slf4j.Logger
import org.slf4j.LoggerFactory

Logger slf4jLogger = LoggerFactory.getLogger('some-logger')
slf4jLogger.info('An info log message logged using SLF4j')

18.3. 使用外部工具和库记录日志

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

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

示例 18.4. 配置标准输出捕获

build.gradle

logging.captureStandardOutput LogLevel.INFO
println 'A message which is logged at INFO level'

为能在任务执行过程中更改标准输出或错误的日志级别,task也提供了一个 LoggingManager

示例 18.5. 对任务配置标准输出捕获

build.gradle

task logInfo {
    logging.captureStandardOutput LogLevel.INFO
    doFirst {
        println 'A task message which is logged at INFO level'
    }
}

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

18.4.
改变 Gradle 日志

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

示例 18.6 的例子. 自定义 Gradle 日志

init.gradle

useLogger(new CustomEventLogger())

class CustomEventLogger extends BuildAdapter implements TaskExecutionListener {

    public void beforeExecute(Task task) {
        println "[$task.name]"
    }

    public void afterExecute(Task task, TaskState state) {
        println()
    }

    public void buildFinished(BuildResult result) {
        println 'build completed'
        if (result.failure != null) {
            result.failure.printStackTrace()
        }
    }
}

gradle
-I init.gradle build
 的输出结果

> gradle -I init.gradle build
[compile]
compiling source

[testCompile]
compiling test source

[test]
running unit tests

[build]

build completed

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

Gradle 1.12 翻译——第十八章. 日志的更多相关文章

  1. Gradle 1.12翻译——第十九章. Gradle 守护进程

    有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...

  2. Gradle 1.12 翻译——第十四章. 教程 - 杂七杂八

    有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...

  3. Gradle 1.12 翻译——第十六章. 使用文件

    有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...

  4. Gradle 1.12 翻译——第十五章. 任务详述

    有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...

  5. Gradle 1.12 翻译——第十二章 使用Gradle 图形用户界面

    有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...

  6. Gradle 1.12用户指南翻译——第二十八章. Jetty 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  7. Gradle 1.12翻译——第二十章. 构建环境

    有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...

  8. Gradle 1.12 翻译——第十三章 编写构建脚本

    有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...

  9. Gradle 1.12 翻译——第十七章. 从 Gradle 中调用 Ant

    有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...

随机推荐

  1. 关于Intellij Idea导出可执行打jar

    今天被人问到如何导jar包出来,mark一下Intellij Idea的简单方式. 1.菜单:File->project stucture 2.在弹窗最左侧选中Artifacts->&qu ...

  2. 模仿天猫实战【SSM版】——项目起步

    前言:现在自己的学习似乎遇到了瓶颈,感觉学习了 SSM 之后有一些迷茫,不知道接下来该往哪里去努力了,我觉得这是个很不好的状态,为了度过这段时期,我准备把天猫模仿下来(给自己找点事做)之后开始去巩固 ...

  3. js页面(页面上无服务端控件,且页面不刷新)实现请求一般处理程序下载文件方法

    对于js页面来说,未使用服务端控件,点击下载按钮时不会触发服务端事件,且不会提交数据到服务端页面后台进行数据处理,所以要下载文件比较困难.且使用jQ的post来请求一般处理程序也不能实现文件的下载,根 ...

  4. 剑指架构师系列-MySQL的安装及主从同步

    1.安装数据库 wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-commun ...

  5. Dockerfile的指令

    指令的一般格式为 INSTRUCTION arguments,指令包括 FROM.MAINTAINER.RUN 等. FROM 格式为 FROM <image>或FROM <imag ...

  6. Android简易实战教程--第五十话《动画扫描》

    祝新年快乐!2017(一起)前行. 转载博客请注明出处:道龙的博客 本篇简答的小案例,使用动画知识,完成一个类似雷达扫描效果,并且加入自定义进度条.对于自定义进度条前面有很详细的解析和案例了,本篇就结 ...

  7. Mybatis源码分析--关联表查询及延迟加载(一)

    Mybatis提供了关联查询映射的功能. 一.一对一关联

  8. Dynamics CRM2016 使用web api来创建注释时的注意事项

    在使用wei api 创建注释的时候,有个字段需要注意下,就是下面图中的objectid字段,虽然它是个查找字段,但不能像普通的查找字段property@odata.bind来赋值 上代码,注意看倒数 ...

  9. AndroidStudio中导入SlidingMenu报错解决方案

    ----------------------------------------------------------------------------------------------[版权申明: ...

  10. 联想G510 在新的SSD上安装Win8.1系统,启动的时候自己加载机械硬盘的Win8.1系统

    进入BIOS,选择Boot,将Boot Priority(优先),修改为Legacy(传统) First: 启动的时候就不会使用UEFI First的windows Boot Manager(wind ...