Gradle-日志
程序员文章站
2022-05-04 13:06:14
日志就像是构建工具的 UI,如果输出太混乱,真正的警告和错误很容易就被忽略了。Gradle 定义了 6 种日志级别,以便于我们识别有用的信息。 ......
日志就像是构建工具的 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