Java - 日誌收集與處理

日誌的出現是爲了彌補使用System.out.println()進行調試的不足. 因爲打印語句需要我們一條一條手動控制.

日誌的管理分爲兩大部分:

  • 日誌記錄器
  • 日誌處理器

日誌記錄器負責按設定級別對日誌進行記錄和向上傳遞, 日誌處理器負責按設定級別對日誌進行打印.

日誌記錄器

使用全局日誌記錄器

最簡單的使用情況是通過調用Logger.getGlobal()獲得全局日誌記錄器. 然後通過info()這樣的方法來按級別輸出日誌.

可以通過Logger.global.setLevel(Level.OFF)設置日誌級別. 現在設置的是OFF, 則所有的日誌信息都不會輸出.

注意 日誌輸出語句只要存在, 無論是否最終進行了輸出, 其消息體就會創建, 如果擔心消息創建的代價, 可以使用lambda表達式代替. 詳見 Jav8 - 通過lambd表達式進行計算 一文.

按名創建日誌記錄器

如果你想對每個類創建分離的日誌記錄器, 可以使用以下語句:

Logger logger = Logger.getLogger(LoggerExample.class.getName());

注意 日誌記錄器是有層級的, 也就是說如果你有一個日誌記錄器名爲com.congyh, 如果你關閉了com日誌記錄器的日誌輸出, 那麼com.congyh也不會進行日誌輸出.

日誌級別

日誌共有七種級別: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST.

默認情況下, 會輸出INFO及以上級別的日誌, 可以通過使用Level.ALL來開啓所有級別的日誌, 也可以按日誌級別進行控制.

你應該使用CONFIG及以下級別的日誌來輸出debug信息.

日誌處理器

日誌處理器按照輸出的形式分爲三種: ConsoleHandler, FileHandler, SocketHandler.

默認的日誌處理器工作在INFO級別, 如果不對其進行修改, 即使日誌記錄器設置在例如CONFIG級別, 那麼日誌實際上是只記錄不輸出. 假設我們現在有一個類叫做LoggerExample, 正確的使用案例如下:

// 按名創建日誌記錄器
Logger logger = Logger.getLogger(LoggerExample.class.getName());

logger.setLevel(Level.CONFIG);
ConsoleHandler consoleHandler = new ConsoleHandler();
consoleHandler.setLevel(Level.CONFIG);
logger.addHandler(consoleHandler);
logger.config("使用按名創建的logger輸出CONFIG級別的信息");

程序輸出如下:

三月 05, 2017 10:24:49 上午 com.github.congyh.log.LoggerExample main
配置: 使用按名創建的logger輸出CONFIG級別的信息
發佈了38 篇原創文章 · 獲贊 37 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章