独自登高楼 望断天涯路

学lucene 学hadoop,Google/baidu搜:“独自登高楼”,进入本博客

Gradle学习(十九)——日志

日志是构建工具的重要部分,如果信息打印的太多,关键性的错误和警告就会被淹没,也就是说你需要更加相关的信息来确定发生了什么错误。Gradle总共分了6个日志级别,和你通常看到的不一样,多了QUIETLIFECYCLE级别,LIFECYCLE还是默认的日志级别,主要用于输出构建进程的信息。

日志级别

级别 用途
ERROR 错误消息
QUIET 重要信息的消息
WARNNING 警告消息
LIFECYCLE 构建进程信息的消息
INFO 信息的消息
DEBUG Debug消息

选择日志的级别

你可以通过命令行选项来选择日志的级别,也可以通过gradle.properties文件来配置日志的级别,还可以通过命令行选型来确定是否要打出日志的堆栈信息。

命令行下设置日志级别

选项 输出日志级别
-q 或者 –quit QUIET或者更高级别
-w 或者 –warn WARN或者更高级别
-i 或者 –info INFO或者更高级别
-d 或者 –debug DEBUG或者更高级别

命令行下设置堆栈选项

选项 意义
什么也不加 当构建错误产生时,不会打印堆栈信息,只有在产生内部错误时才会打印堆栈信息,当日志级别调整为DEBUG时,会打印出截断的堆栈信息
-s 或者 –stacktrace 提供截断的堆栈信息,但我们建议打印全部的堆栈信息,因为groovy动态语言的特性,截断的堆栈信息并不能完全找到错误所在。
-S 或者 –full-stacktrace 打印完整的堆栈信息

自己打印日志消息

打印日志最简单的方式就是在构建文件中使用标准输出,Gradle会把标准输出重定向到QUITE级别的日志

println 'A message which is logged at QUIET level'

Gradle还提供了logger属性,它是一个Logger的实例,Logger接口继承于SLF4J的Logger接口,并增加了一些Gradle特有的方法。

logger.info('info')
logger.debug('debug')
logger.lifecycle('lifecycle')
logger.quiet('quite')
logger.error('error')
logger.warn('warn')
logger.trace('trace')

还可以使用典型的SLF4J的模式来输入日志,比如占位符操作

def hello='hello'
logger.info('this is {}',hello)

你还可以直接hook进gradle的日志系统直接使用SLF4J的logger,就像之前使用构建脚本中的logger那样使用它

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都有自己的日志系统,Gradle可以把他们的日志重定向到Gradle的日志系统。这种重定向可以1:1的同样的日志级别可以被映射过来,但是要除去ant/ivy的TRACE级别,这个级别会映射成Gradle的DEBUG级别。这意味着默认情况下除了error和warn级别,你不会看到ant/ant的其他日志输出。

已经有很多工具可以记录日志,但是很多时候还是使用标准输出。默认情况下,Gradle会把标准输出重定向到QUITE级别,并且把标准错误重定向到ERROR级别。Project对象还提供了logging属性,这个属性是个LoggingManager实例,可以来设置标准输出和标准错误重定向后的日志级别

logging.captureStandardOutput LogLevel.INFO
println 'info'

也可以只在任务的执行期间改变标准输出和错误重定向后日志级别,但这里的logging就是Task的实例提供的了

task logInfo {
    doLast {
        logging.captureStandardOutput LogLevel.INFO
        println 'info'
    }
}

Gradle还提供了Java Util Logging,Jakarta Commons Logging和Log4j logging工具包的集成,你使用这些工具的任何日志输出,都会被重定向到Gradle的日志系统

更改Gradle的日志UI

你可以用自定义的日志来替换Gradle的日志UI,比如你想增加多一些日志,或者减少一些日志,或者更改日志的格式。你可以通过Gradle.useLogger(java.lang.Object)方法来实现,可以在build.gradle或者在init.gradle中实现,但要注意一点,一旦实现这个,你就屏蔽了对应的Gradle的默认的日志UI。

useLogger(new CustomEventLogger())

class CustomEventLogger extends BuildAdapter implements TaskExecutionListener {

    @Override
    void beforeExecute(Task task) {
        println "before [$task.name]"
    }

    @Override
    void afterExecute(Task task, TaskState taskState) {taskState.executed
        println "after [$task.name] executed:$taskState.executed"
    }
}

执行命令如下:

± % gradle -I init.gradle logInfo                                         

> Configure project :

> Task :logInfo
before [logInfo]
after [logInfo] executed:true

1 actionable task: 1 executed

你可以可以实现以下监听接口,来达到自定义日志UI的目的,要注意的是,只替换你实现了的接口的日志记录。

  • BuildListener
  • ProjectEvaluationListener
  • TaskExecutionGraphListener
  • TaskExecutionListener
  • TaskActionListener
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lastsweetop/article/details/79217333
文章标签: gradle
个人分类: gradle
所属专栏: Gradle学习
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Gradle学习(十九)——日志

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭