簡體   English   中英

Java Log Coverage工具

[英]Java Log Coverage tool

是否有任何工具或策略用於生成(Java,log4j)的“日志覆蓋”報告? 像代碼覆蓋一樣,但確保沒有大型方法,類或包不記錄任何內容。

在編寫Web服務時,我的團隊不會寫很多日志語句。 在調試運行生產代碼的實時問題時,我們總是希望有。 我們不可避免地嘗試在附加調試器或添加額外的日志語句的情況下重現測試環境中的錯誤,這可能非常困難,具體取決於所涉及的結構和互操作。

有沒有人使用它作為代碼質量指標?

代碼覆蓋需要特殊的工具,因為您試圖找出是否通過任何測試執行了一條生產代碼。 你要問的是更模糊一點,可能要容易得多(“這個大類的日志記錄是什么?”)或者更難以實現(“我們是否記錄了生產中斷的方法” ?“)。

對於第一個問題,你可以很快地編寫一個shell腳本來完成這項工作。 例如,這是Perl中的骨架。 在這里,我假設我們正在使用SLF4J並且看到導入“LoggerFactory”足以證明有一個記錄器。

while ($filename = shift) {
    open my $in, "<$filename";
    my $loc = 0;
    my $log = "NO LOGGER";
    while (<$in>) {
        $loc++;
        if (m/import org.slf4j.LoggerFactory/) {
            $log = "has logger";
        }
    }
    print "$filename : $loc LOC $log\n";
    $total{$log} += $loc;
}
print "\n\nTOTAL LOGGED: $total{'has logger'}\nTOTAL UNLOGGED: $total{'NO LOGGER'}\n";

我可以從我的shell運行它來運行一個小項目中的所有Java文件

$ find . -name \*.java -exec perl haslog.pm {} \+

這僅適用於小型項目,而且相當脆弱,但制作更強大的版本並不是一件容易的事。

大量的日志可能是噪音,根據我的經驗,我總是發現日志記錄很痛苦。 話雖如此,如果日志管理得當,您可以獲得良好的診斷/報告。 代碼未正確測試的原因之一是因為生產代碼中包含大量日志。 開發人員傾向於在開發時添加一個日志語句以檢查代碼的工作原理,因此它鼓勵不使用正確的斷言編寫測試。 你需要的是許多經過良好測試的小課程。 斷言應該准確地告訴你測試失敗的原因。

讓我們說在你的代碼路徑中你期望發生一些事情,這是它的主要責任(例如創建一個注冊用戶/或登錄用戶的數據庫條目),當我說它的主要責任我不是在談論發生的副作用你的代碼路徑。 如果主代碼路徑中有錯誤條件,則應該在堆棧中拋出異常,您可以將其記錄並轉換為用戶友好消息。 RuntimeExceptions在這里很不錯,因為您不希望捕獲這些異常,直到它一直到視圖層。 副作用也可以記錄,因為它們就像信息/警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM