Gradle-日志
日志就像是构建工具的 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()
方法传入一个自定义的日志对象。
这个对象可以是以下几个监听的派生类
- BuildListener
- TaskExecutionGraphListener
- ProjectEvaluationListener
- TaskExecutionListener
- TaskActionListener
- StandardOutputListener
- TestListener
- TestOutputListener
- DependencyResolutionListener
这里以 任务执行 (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-日志的更多相关文章
- Android Gradle 学习笔记(三):Gradle 日志
在第一节,我们使用到了gradle -q hello命令行来运行Hello World,并对Hello World进行了简单的分析,了解到 gradle -q hello 的意思是要执行的build. ...
- Gradle 1.12 翻译——第十八章. 日志
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- 【Gradle】Gradle入门
Gradle入门 配置Gradle环境 安装之前确保已经安装配置好Java环境,要求JDK6以上,并且在环境变量里配置了JAVA_HOME,查看Java版本可以在终端输入如下命令: java -ver ...
- Gradle系列之初识Gradle
原文首发于微信公众号:躬行之(jzman-blog) 学习 Android 有一段时间了,开发中经常使用到 Gradle ,但是不知道 Gradle 构建项目的原理,计划花一点时间学习一下 Gradl ...
- Gradle实战(01)--介绍与安装
前言 本章你将学习到 Gradle的介绍 Gradle的安装 Gradle的hello world 1 Gradle的介绍 Gradle是专注于灵活性和性能的开源构建自动化工具 Gradle构建脚本是 ...
- 更新日志 - fir.im Jenkins & Gradle 插件上线
最近 fir.im 工程师们效率爆表,fir.im 实用工具集合又添加了新的成员-- Jenkins & Gradle 插件,让 App 打包上传更加简单快速. fir.im Jenkins ...
- 在gradle 中使用ant 执行 “命令行”(CMD)不出日志解决方案
因为gradle 好恶心,声明的任务,一定会事先运行一次,而任务追加的话就不会 例如: task hello(){ println "HelloWorld" } task hell ...
- gradle结合spring-boot生成可运行jar包,并打印日志
1.用gradle把springboot项目打包成jar 1.1 build.gradle 中添加 buildscript { repositories { mavenLocal() maven { ...
- 日志冲突解决方案(基于gradle)
日志冲突解决方案 前提:我使用gradle管理项目 最近在项目中需要用curator客户端操作zookeeper,在maven仓库拉取的jar包导致日志冲突,会报以下的错误: 经常会有如上图2处红色框 ...
- spring boot的gradle整合日志
1.引入包configurations { providedRuntime // remove default logger all*.exclude group: 'org.springframew ...
随机推荐
- iPhone调试移动端webview
一.模拟器调试 1.启动Xcode 2.选择菜单Xcode - Open Developer Tool - Simulator 3.启动Simulator后,选择Simulator菜单Hardware ...
- c++小游戏——2048
#include <stdio.h> #include <time.h> #include <conio.h> #include <windows.h> ...
- 关于ArcGIS api for JavaScript的一些内容
2018-3-19 ArcGIS api for JavaScript 在3.4之后就已经抛弃了过时的写法,采用了AMD的写法,AMD规范即异步模块加载机制,这种规范让JS就像其它面向对象语言(比如J ...
- [NLP-ASR] 语音识别项目整理(一) 语音预处理
简介 之前参与过114对话系统的项目,中间搁置很久,现在把之前做过的内容整理一下,一是为自己回顾,二是也希望分享自己看的内容,中间也遇到一些问题,如果您可以提一些建议将不胜感激. 114查询主要分 ...
- 2019牛客暑期多校训练营(第四场)K.number
>传送门< 题意:给你一个字符串s,求出其中能整除300的子串个数(子串要求是连续的,允许前面有0) 思路: >动态规划 记f[i][j]为右端点满足mod 300 = j的子串个数 ...
- 熟悉软件的生命周期AND测试工程师的工作流程
1.软件的生命周期 *软件生命周期(SDLC)是软件开始研制到最终被废弃不用所经历的各个阶段.在不同阶段里,由不同的组织.个人和资源进行着明确的任务. 2.生命周期的模型 *常见的生命周期模型有:瀑布 ...
- Jmeter+ant+Jenkins实现接口自动化平台及报告发送
项目中实现了比较方便的自动化体系,一直没时间总结一下,现抽空整理一番,废话不多说 内容如下: 一.环境准备 jmeter : 编写接口脚本,实现接口测试 ant :静默执行jmeter脚本,并生 ...
- 【linux日志】【日志分析】linux系统各日志文件的含义
前段时间太忙,没有来得及管博客,最近时间充裕了,开始更新博客. 因为最近在看linux日志相关内容,把心得分享给大家 linux系统日志文件默认存放路径/var/log/ ls查看此路径下有哪些日志文 ...
- TCP加速机制是如何加速的?
一.什么是TCP加速? TCP加速就是在高时延链路提高吞吐量的一系列解决方案. 二.为什么需要对TCP进行加速? 1.传统的TCP拥塞控制算法并不适用于高时延.高误码的链路. 2.随着we ...
- .Net Core DevOps -免费用Azure四步实现自动化发布(CI/CD)
前言 linux 大行其道的今天想必大家都已经拥抱 core 了吧,通常的方案都是 gitlab+jenkins+centos,但是这样的方案不适合我这种懒人,一直在寻求简单的解决方案,在寻求方案的过 ...