在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 日志
快速開始 Web 應(yīng)用
更多關(guān)于任務(wù)
編寫構(gòu)建腳本
守護(hù)進(jìn)程
問題解決
日志
插件
總覽
快速開始 Java
教程-"This and That"
使用 Gradle 圖形化用戶界面
從 Gradle 使用 Ant
依賴管理的基礎(chǔ)
構(gòu)建環(huán)境
處理文件
構(gòu)建腳本的基本
使用 Gradle 命令行
快速開始 Groovy
安裝
介紹

日志

日志是構(gòu)建工具的主要"UI"。如果日志太多,真正的警告和問題容易被隱藏。另一方面,如果出了錯,你需要找出相關(guān)的信息。Gradle 定義了6個日志級別,如表 Table 18.1, “Log levels” 所示。除了那些您通過可能會平??吹降娜罩炯墑e之外,有兩個 Gradle 特定日志級別。這兩個級別分別是 QUIETLIFECYCLE。 默認(rèn)使用后面的這個日志級別,用于報告構(gòu)建進(jìn)度。

Table 18.1. Log levels

級別 用途
ERROR Error 錯誤信息
QUIET 重要信息
WARNING Warning 警告信息
LIFECYCLE 過程信息
INFO 信息
DEBUG Debug 調(diào)試信息

選擇級別

在 Table 18.2, “Log level command-line options” 中命令行,是用來選擇不同的級別的選項。 Table 18.3, “Stacktrace command-line options” 中的是影響堆棧跟蹤日志

Table 18.2. Log level command-line options

選項 輸出日志的級別
no logging options LIFECYCLE 及更高
-q or --quiet QUIET 及更高
-i or --info INFO 及更高
-d or --debug DEBUG 及更高 (所有的日志信息)

Table 18.3. Stacktrace command-line options

選項 含義
No stacktrace options 構(gòu)建錯誤(如編譯錯誤)時沒有棧跟蹤打印到控制臺。只有在內(nèi)部異常的情況下才打印棧跟蹤。如果選擇 DEBUG 日志級別,則總是輸出截取后的棧跟蹤信息。
-s or --stacktrace 輸出截斷的棧跟蹤。我們推薦使用這一個選項而不是打印全棧的跟蹤信息。Groovy 的全棧跟蹤非常冗長 (由于其潛在的動態(tài)調(diào)用機(jī)制,然而他們通常不包含你的的代碼中哪里錯了的相關(guān)信息。)
-S or --full-stacktrace 打印全棧的跟蹤信息。

編寫自己的日志消息

在構(gòu)建文件,打印日志的一個簡單方法是把消息寫到標(biāo)準(zhǔn)輸出中。Gradle 會把寫到標(biāo)準(zhǔn)輸出的所有內(nèi)容重定向到它的日志系統(tǒng)的 QUIET 級別中。

Example 18.1. Using stdout to write log messages

build.gradle

    println 'A message which is logged at QUIET level'

Gradle 還提供了一個 logger 屬性給構(gòu)建腳本,它是一個 Logger 實例。該接口擴(kuò)展自 SLF4J 的 Logger接口,并添加了幾個 Gradle 的特有方法。下面是關(guān)于如何在構(gòu)建腳本中使用它的示例:

Example 18.2. Writing your own log messages

build.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.')

您也可以在構(gòu)建腳本中通過其他使用的類掛鉤到 Gradle 的日志系統(tǒng)中(例如 buildSrc 目錄中的類)。只需使用一個 SLF4J 的logger對象。你可以在構(gòu)建腳本中,用與內(nèi)置的logger同樣的方式使用這個logger。

Example 18.3. Using SLF4J to write log messages

build.gradle

    import org.slf4j.Logger
    import org.slf4j.LoggerFactory

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

使用外部工具和庫記錄日志

Gradle 內(nèi)部使用 Ant 和 Ivy。它們都有自己的日志系統(tǒng)。Gradle 將他們?nèi)罩据敵鲋囟ㄏ虻?Gradle 的日志系統(tǒng)。從 Ant/Ivy 的日志級別到 Gradle 的日志級別是一對一的映射,除了 Ant/Ivy 的 TRACE 級別,它是映射到 Gradle 的 DEBUG 級別的。這意味著默認(rèn)情況下, Gradle 日志級別將不會顯示任何 Ant/Ivy 的輸出,除非是錯誤或警告信息。

有很多的工具仍然在使用標(biāo)準(zhǔn)輸出日志記錄。默認(rèn)情況下,Gradle 將標(biāo)準(zhǔn)輸出重定向到 QUIET日志級別,把標(biāo)準(zhǔn)錯誤輸出重寫向到 ERROR 級別。這種行為是可配置的。Project 對象提供了一個 LoggingManager,它允許您在計算構(gòu)建腳本時,修改標(biāo)準(zhǔn)輸出和錯誤重定向的日志級別。

Example 18.4. Configuring standard output capture

build.gradle

    logging.captureStandardOutput LogLevel.INFO
    println 'A message which is logged at INFO level'

為能在任務(wù)執(zhí)行過程中更改標(biāo)準(zhǔn)輸出或錯誤的日志級別,task也提供了一個 LoggingManager。

Example 18.5. Configuring standard output capture for a task

build.gradle

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

Gradle 還提供了對 Java Util Logging,Jakarta Commons Logging 和 Log4j 的日志工具的集成。你生成的類使用這些日志記錄工具輸出的任何日志消息,都將被重定向到 Gradle 的日志系統(tǒng)。

改變 Gradle 日志

您可以用您自己的 logging UI 大量地替換 Gradle 的。你可以這樣做,例如,如果您想要以某種方式自定義 UI ——以輸出更多或更少的信息,或修改日志格式您可以使用 Gradle.useLogger() 方法替換這個 logging。它可以在構(gòu)建腳本,或 init 腳本,或通過內(nèi)嵌的 API 訪問。請注意它完全禁用 Gradle 的默認(rèn)輸出。下面是一個示例,在 init 腳本中修改任務(wù)執(zhí)行和構(gòu)建完成的日志打印。

Example 18.6. Customizing what Gradle logs

init.gradle

    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) {
                result.failure.printStackTrace()
            }
        }
    }

執(zhí)行 gradle -I init.gradle build

    > gradle -I init.gradle build
    [compile]
    compiling source

    [testCompile]
    compiling test source

    [test]
    running unit tests

    [build]

    build completed

你的 logger 可以實現(xiàn)下面列出的任何監(jiān)聽器接口。當(dāng)你注冊一個 logger時,只能替換它實現(xiàn)的接口的日志記錄。其他接口的日志記錄是不變的。