1. 程式人生 > >日誌收集與處理

日誌收集與處理

日誌的出現是為了彌補使用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級別的資訊