日志就像是构建工具的 UI,如果输出太混乱,真正的警告和错误很容易就被忽略了。Gradle 定义了 6 种日志级别,以便于我们识别有用的信息。

日志级别

Gradle 的日志 和Android 一样也有多个级别。

级别 用于
ERROR 错误消息
QUITE 重要消息
WARNING 警告消息
LIFECYCLE 进度消息
INFO 信息消息
DEBUG 调试消息

要显示指定级别的日志,可以通过日志开关来控制的,在执行的时候加入下面这些开关即可.

开关选项 输出的日志级别
无选项 LIFECYCLE 及其更高级别
-q 或者 --quite QUITE
-i 或者 --info INFO
-d 或者 --debug DEBUG
//在执行 build task时的输出的日志会是 QUITE 级别
gradle -q build

如果不想每次都在命令行加入参数来指定,可以在 配置文件(gradle.properties) 中修改,值可以是六种的任意一个,不区分大小写

org.gradle.logging.level=(quiet,warn,lifecycle,info,debug)

或者在脚本中更改级别 ,project 类 提供了 LoggerManager 来管理 日志

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

Task 类也提供了这个 LoggerManager 所以在 任务中也是可以配置的;

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

输出堆栈信息

在任务执行出问题的时候,堆栈信息就显得尤为重要了, 然而默认堆栈信息开关是关闭的,只有打开开关才会输出出来。

命令行选项 用于
无选项 没有堆栈信息输出
-s 或者 --stacktrace 输出关键堆栈信息
-S 或者 -full-stacktrace 输出全部堆栈信息

一般使用 -s 或者 --stacktrace 输出关键堆栈,输出全部堆栈信息就太多了,不好定位问题。

gradle build -s

输入自己的日志

通常情况下都是使用 print 系列方法,把日子输出到 控制台(它把 Gradle 定向为 QUITE 级别日志)

println '输出一段日志信息'

除了 print 系列之外,还可以使用内置的 logger 更灵活的控制输出不同级别的日志。

task log(){
doLast{
logger.quiet('quiet 重要消息')
logger.error('error 错误消息')
logger.lifecycle('lifecycler 进度消息')
logger.warn('warn 警告消息')
logger.info('info 消息 信息')
logger.debug('debug 调试信息')
}
}

新建一个 logger.gradle 添加一个 log Task 运行 log Task

gradle -b logger.gradle log

如果使用 -d 的话 就是下面这种了。

gradle -b logger.gradle -d log

更改日志内容

可以通过 Gradle.useLogger()

方法传入一个自定义的日志对象。

这个对象可以是以下几个监听的派生类

这里以 任务执行 (TaskExecutionListener ) 为例

task test {
doLast{
logger.quiet "级别:{}","quite"
logger.error "级别:error"
}
} //使用指定的日志对象
gradle.useLogger(new CustomEventLogger()) //自定义日志内容
class CustomEventLogger extends BuildAdapter implements TaskExecutionListener {
void beforeExecute(Task task){
println "beforeExecute-> ${task.name}"
} void afterExecute(Task task,TaskState state){
println "afterExecute -> ${task.name} successed?${state.failure==null}"
} void buildFinished(BuildResult result){
println "build completed"
if(result.failure){
result.failure.printStackTrace()
}
} }

执行

gradle test

输出如下

> Task :test
beforeExecute-> test
级别:quite
级别:error
afterExecute -> test succeed?true
build completed
1 actionable task: 1 executed

End

Gradle-日志的更多相关文章

  1. Android Gradle 学习笔记(三):Gradle 日志

    在第一节,我们使用到了gradle -q hello命令行来运行Hello World,并对Hello World进行了简单的分析,了解到 gradle -q hello 的意思是要执行的build. ...

  2. Gradle 1.12 翻译——第十八章. 日志

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

  3. 【Gradle】Gradle入门

    Gradle入门 配置Gradle环境 安装之前确保已经安装配置好Java环境,要求JDK6以上,并且在环境变量里配置了JAVA_HOME,查看Java版本可以在终端输入如下命令: java -ver ...

  4. Gradle系列之初识Gradle

    原文首发于微信公众号:躬行之(jzman-blog) 学习 Android 有一段时间了,开发中经常使用到 Gradle ,但是不知道 Gradle 构建项目的原理,计划花一点时间学习一下 Gradl ...

  5. Gradle实战(01)--介绍与安装

    前言 本章你将学习到 Gradle的介绍 Gradle的安装 Gradle的hello world 1 Gradle的介绍 Gradle是专注于灵活性和性能的开源构建自动化工具 Gradle构建脚本是 ...

  6. 更新日志 - fir.im Jenkins & Gradle 插件上线

    最近 fir.im 工程师们效率爆表,fir.im 实用工具集合又添加了新的成员-- Jenkins & Gradle 插件,让 App 打包上传更加简单快速. fir.im Jenkins ...

  7. 在gradle 中使用ant 执行 “命令行”(CMD)不出日志解决方案

    因为gradle 好恶心,声明的任务,一定会事先运行一次,而任务追加的话就不会 例如: task hello(){ println "HelloWorld" } task hell ...

  8. gradle结合spring-boot生成可运行jar包,并打印日志

    1.用gradle把springboot项目打包成jar 1.1 build.gradle 中添加 buildscript { repositories { mavenLocal() maven { ...

  9. 日志冲突解决方案(基于gradle)

    日志冲突解决方案 前提:我使用gradle管理项目 最近在项目中需要用curator客户端操作zookeeper,在maven仓库拉取的jar包导致日志冲突,会报以下的错误: 经常会有如上图2处红色框 ...

  10. spring boot的gradle整合日志

    1.引入包configurations { providedRuntime // remove default logger all*.exclude group: 'org.springframew ...

随机推荐

  1. Hybrid App从概念到实战

    最近一直在准备找工作,看了很多公司的招聘介绍,有相当一部分直接写:熟悉 Hybrid App 开发加分!正好,我司开发的就有这种 Hybrid App--使用WebViewJavascriptBrid ...

  2. import tensorflow 报错

    >>> import tensorflowe:\ProgramData\Anaconda3\lib\site-packages\h5py\__init__.py:36: Future ...

  3. 个人永久性免费-Excel催化剂功能第91波-地图数据挖宝之行政区域信息实时下载(含经纬度)

    移动互联网和O2O兴起的这十年时间里,由地图LBS功能衍生出一大堆的极高商业价值的数据及应用,地图相关的数据,也是数据分析过程中一个大宝藏,从此篇开始将带给大家一系列的地图相关的数据采集,满足数据分析 ...

  4. c语言进阶11-算法设计思想

    一.  算法设计的要求: 为什么要学算法? /* 输出Hello word! */ #include "stdio.h" void main() { printf("He ...

  5. C#3.0新增功能10 表达式树 03 支持表达式树的框架类型

    连载目录    [已更新最新开发文章,点击查看详细] 存在可与表达式树配合使用的 .NET Core framework 中的类的大型列表. 可以在 System.Linq.Expressions 查 ...

  6. Java EE.JSP.脚本

    脚本是<%与%>之间Java语言编写的代码块. 1.输出表达式 <%=表达式%>输出表达式的计算结果. 2.注释 1)输出到客户端的注释:<!-comment-> ...

  7. 如何启用linux的路由转发功能

    如何使用iptables的NAT功能把红帽企业版Linux作为一台路由器使用? 方法: 提示: 以下方法只适用于红帽企业版Linux 3 以上. 1.打开包转发功能: echo "1&quo ...

  8. 重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印

    重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印 一.引言 桌面端系统经常需要对接各种硬件设备,比如扫描器.读卡器.打印机等. 这里介绍下桌面端 ...

  9. HTTP_1_Web及网络基础

    Web使用一种HTTP(HyperText TransFer Protocol,超文本协议)的协议作为规范,完成从客户端到服务器等一系列运作流程.可见web是建立在HTTP协议上通信的. 通常我们使用 ...

  10. 阅读nopcommerce startup源码

    创建一个asp.net core项目,可以到到startup类有两个方法 // This method gets called by the runtime. Use this method to a ...