除了常用的 debug,info,warning,error ,gradle自己特有的quiet和lifecycle。
-q/--quiet
-i//--info
-d/--debug
引申出
-s/--stacktrace
-S/--full-stacktrace
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
import org.slf4j.Logger import org.slf4j.LoggerFactory Logger slf4jLogger = LoggerFactory.getLogger('some-logger') slf4jLogger.info('An info log message logged using SLF4j')
因为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'
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
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
使用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