Gradle-日誌

  • 2019 年 12 月 11 日
  • 筆記

日誌級別

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()) 方法傳入一個自定義的日誌對象。

這個對象可以是以下幾個監聽的派生類

這裡以 任務執行 (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

Tags: