HOWTO · Java
Java 中的 console.log
了解 JavaScript 的 console.log 與 Java 主控台輸出有何不同,並使用 System.out.println 或 Java 日誌框架記錄訊息。
本頁內容
Java 沒有內建的 console.log 函式;這個名稱屬於 JavaScript。若要在 Java 程式中快速顯示訊息,可以使用 System.out.println。若應用程式需要日誌層級、可設定的輸出目的地或一致的格式,則應使用日誌 API 或框架。
使用 System.out.println
System.out.println 會將值寫入標準輸出,並在後面換行。以下是一個完整的 Java 程式,會輸出一則問候訊息:
public class ConsoleExample {
public static void main(String[] args) {
String message = "Hello, Java!";
System.out.println(message);
}
}
Hello, Java!
程式會將 message 的值寫入標準輸出。這種方式適合小型命令列程式、快速診斷,或要顯示給執行程式的人看的內容。它很簡單,但不提供日誌層級、時間戳記或可設定的輸出目的地。在較大型的應用程式中,散落各處的列印敘述會更難篩選與管理。
如果你想沿用熟悉的呼叫語法,也可以自行撰寫包裝類別:建立 Console 類別,並加入一個 static void log(String message) 方法,讓方法內容呼叫 System.out.println(message),之後即可呼叫 Console.log("Ready")。Console.log 是你自行撰寫的程式碼,不是 Java 內建 API;這樣做並不會讓 Java 擁有 JavaScript 的 console.log。
使用 Java 日誌框架
日誌 API 讓程式碼依嚴重程度記錄訊息,日誌實作則負責格式化訊息,並決定輸出到主控台或檔案等目的地。常見的層級可區分診斷訊息、警告與錯誤。透過設定,你可以控制要顯示哪些訊息以及輸出位置,避免一般輸出與應用程式日誌混在一起。
Java 標準程式庫內建 java.util.logging。若你想使用日誌 API,又不想加入第三方相依套件,這是實用的選擇。Log4j 則是獨立的日誌實作,提供可設定的附加器與版面配置。SLF4J 的角色不同:它是提供通用日誌 API 的門面,必須搭配相容的提供者或繫結,才能產生日誌輸出。除非有特定的整合需求而必須橋接或組合日誌系統,否則一個應用程式選用一種日誌實作即可。
以下是簡短的 java.util.logging 範例:使用 Logger logger = Logger.getLogger(MyClass.class.getName()); 取得記錄器,再呼叫 logger.info("Service started");、logger.warning("Retrying request"); 或 logger.severe("Request failed");。這些呼叫使用 JDK 內建的日誌設定,不需要額外相依套件。採用預設主控台處理器時,代表性的輸出行會包含時間戳記、層級與訊息,例如 INFO: Service started;完整前綴及啟用的層級會依執行環境的日誌設定而異。這裡展示的是 API 與常見格式,並非實際執行結果。
使用 SLF4J 與 Logback
若要在 Maven 專案中使用 SLF4J 與 Logback,請加入 org.slf4j:slf4j-api 相依套件,以及相容版本的 ch.qos.logback:logback-classic 提供者。後者會為 SLF4J API 提供 Logback 實作。請透過專案的相依套件管理機制選擇版本;舊範例中的版本可能已不再合適,因此本文不會宣稱任何固定版本組合是目前版本。
在 Java 類別中,宣告 private static final Logger logger = LoggerFactory.getLogger(MyClass.class);,再透過 logger.info("Service started")、logger.warn("Retrying request") 或 logger.error("Request failed", exception) 等呼叫記錄訊息。最後一種寫法會傳入例外物件,讓後端能記錄其堆疊追蹤。當執行階段類別路徑中包含 Logback 時,提供者會依照設定處理這些呼叫。例如,主控台設定可能會輸出 INFO MyClass - Service started;這是代表性的格式,不是實際觀察到的結果,實際的門檻、格式與目的地都取決於 Logback 設定。讓應用程式透過 SLF4J 呼叫日誌,可在更換提供者時,減少對使用門面的程式碼造成的影響。
結論
小型程式只需要直接輸出到主控台時,使用 System.out.println 即可。若應用程式日誌需要嚴重程度層級、可設定的格式與多種輸出目的地,則可使用 Log4j 或 Logback 等日誌實作。java.util.logging 已包含在 Java 標準程式庫中;SLF4J 則是門面,可將應用程式程式碼連接到 Logback 等提供者。
常見問題
Java 日誌有什麼用途? 日誌會記錄應用程式正在執行的工作,協助診斷問題並監控運作情況。請避免在日誌訊息中記錄密碼或其他敏感資料。
日誌層級有什麼幫助? debug、info、warn 和 error 等層級,能讓開發者區分診斷細節、重要事件與故障。設定中的門檻可控制哪些層級會輸出。
一個應用程式可以使用多種日誌框架嗎? 可以包含多種日誌系統或橋接程式,但這會增加設定複雜度,也可能造成重複輸出。若相依套件使用另一種日誌 API,建議選擇一個後端,並謹慎設定必要的橋接。
SLF4J 本身是日誌後端嗎? 不是。SLF4J 是門面。請加入相容的提供者,例如 Logback,讓實作負責處理透過門面發出的呼叫。
什麼時候該選擇框架,而不是 System.out.println? 當你需要依層級篩選訊息、透過設定變更輸出目的地或格式,或在多個應用程式元件間統一管理日誌時,應選擇日誌框架。若只是短小的程式或單一要顯示的結果,通常使用 System.out.println 就足夠。