gradle学习(19)-log系统

1.log信息的分类


除了常用的 debug,info,warning,error ,gradle自己特有的quiet和lifecycle。


2.选择log等级


-q/--quiet

-i//--info

-d/--debug


引申出

-s/--stacktrace

-S/--full-stacktrace


3.编写自己的log信息


println 后跟信息,gradle会将其重定向到日志系统中,默认为quiet等级。

当然你可以使用logger属性来编写不同等级的,继承与slf4j logger接口,然后加上一些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.')

qianhuis-Mac-mini:0112 qianhui$ gradle
An info log message which is always logged.
An error log message.
A warning log message.
A lifecycle info log message.
:help

Welcome to Gradle 2.2.1.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

BUILD SUCCESSFUL

Total time: 2.265 secs

4.SLF4J日志


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

5.外部工具和库的logging


因为gradle是基于ant喝ivy的,所以前辈的logging输出应该被考虑,gradle会把它们的log重定向到gradle的log系统中,对于gradle有的等级,可以很好

的重定向,而对于gradle没有的,比如ant和ivy的trace等级,gradle会将其映射为debug等级,说明gradle默认情况智慧输出ant/ivy 的error和warning信息。

对于一些使用标准输出的工具,默认情况下,gradle重定向为quiet等级,标准的错误会被定义为error等级,但是这都是可以配置的。project对象提供一个LoggingManager,

该对象允许你去改变默认的重定向log等级。


logging.captureStandardOutput LogLevel.INFO

println 'A message which is logged at info level'

将log等级定位成info等级,执行命令后,如果加-q后会无法显示:


qianhuis-Mac-mini:0112 qianhui$ gradle -q

Welcome to Gradle 2.2.1.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

6.为任务定义个log等级


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

执行命令后会发现,任务中的log被隐藏掉了,因为任务中定义了log的等级为info,小于quiet等级,所以没有输出。说明任务内定义log等级只在任务内有效。


qianhuis-Mac-mini:0112 qianhui$ gradle -q logInfo
A message which is logged at info level
end


7.改变gradle日志


使用Gradle.useLogger()方法,具体做法是通过API中的接口重新定义log器。


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) {
        
 } }

但是上面的程序暂时还无法运行成功,暂时不太清楚为什么,以后再找答案。


要想自定义log器,可以研究下面几个接口:


BuildListener

ProjectEvaluationListener

TaskExecutionGraphListener

TaskExecutionListener

TaskActionListener


你可能感兴趣的:(gradle)