簡體   English   中英

用Java編譯輸入或輸出調試代碼

[英]Compile debug code in or out in Java

我希望能夠在發布產品時將調試代碼(詳細的日志記錄等)編譯出來,但為了調試而編譯進去。

我知道,如果我在常量上分支,編譯器將刪除該分支,這就是我想要的。 所以我有一堂課:

class Debug {
  public static final boolean ON=true;
}

我的調試代碼在這樣的分支中:

if (Debug.ON) {
    // Verbose / expensive logging goes here
}

我的問題是,在不實際編輯源文件的情況下,如何安排Debug.ON在編譯時設置為true或false?

編輯:請注意,我不關心控制日志輸出是否出現-我正在使用java.util.Logging,它可以解決這一問題。 我更關心的是編譯出任何昂貴的代碼,這些代碼正在准備永遠不會得到輸出的日志消息,或者進行生產模式中不需要的度量。

我想我可以有一個可以從模板或其他東西制作源文件的ant目標,但這似乎很容易。 在C ++中,我可以定義一個可以與-D一起傳遞的預處理器符號-是否有Java等效項? 還是其他更好的方法?

您可以做的是擁有兩個Jar或類文件。

一個包含ON = true,另一個ON = false的Debug類。

然后,當您根據所需的調試狀態進行編譯時,可以在類/ jar文件中包含DEBUG或在類/ jar文件中包含DEBUG。

邁克爾·威爾斯(Michael Wiles)的答案可能是最精確地完成您所要詢問的方法。 但是,所有流行的日志記錄框架都允許您查詢記錄器是否配置為在特定的日志記錄級別實際輸出任何內容。

對於java.util.logging您將使用isLoggable 雖然這不是編譯時檢查,但與記錄計算成本較高的記錄相比,它應該相當便宜。

暫無
暫無

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

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