【譯文】Java Logging

本文講Java內置的java.util.logging軟件包中的 api。主要解釋怎樣使用該api添加logging到你的application中,怎樣加配置它等。可是本文不談你應該把什麼東西寫到日誌中。html

Note :本文談到的api是Java 6中的。不涉及其餘流行的Java logging api(好比Log4J, SLF4J, Apache Commons Logging, LogBack 等)。它只關注Java內置的API。java

若是你可以選擇你本身的logging api,你也許能夠選擇上面提到的流行api。可是,若是你像我同樣,正在開發Google APP Engine上的web應用,那麼你不得不使用java.util.logging。web

 

 

Java Logging: 綜述

下圖是Java Logging API工做的概況示意圖:api

Logging 架構

全部的logging都是經過一個Loger 實例產生的,Logger收集數據,保存到LogRecord。LogRecord轉發到Handler。Handler來決定怎麼處理這些LogRecord。例如,LogRecord能夠寫到disk,或者經過網絡發送到一個監控系統。網絡

Logger和Handler均可以使用Filter來篩選LogRecord,來決定是否轉發。 架構

  • Log Level 每一條message都包含一個log level的標籤。這個level是一個整數,用來標識這條message的重要性。數值越大,重要性越高。
  • Logger Hierachy Logger實例按層級組織,底層的Logger得到的信息會轉發到祖先Logger。所以,log level 和 messages 能夠被篩選,或者選擇是否接受整個Logger分支。
  • LogManager 用來控制Logger hierarchy, 同時還管理一個全局的日誌配置文件。

 

 

 Java Logging: 基本使用方法

一般的作法是,在須要添加日誌的類中建立一個 static final的Logger 實例,全部該類的對象共享該實例。例子以下:app

public class LoggingExamples {

    private static final Logger logger =
        Logger.getLogger(LoggingExamples.class.getName()); // 一般把該類的全名做爲Logger的名字
  public void doIt() {
        logger.entering(getClass().getName(), "doIt");

        try{
            //... something that can throw an exception
        } catch (Exception e) {
            logger.log(Level.SEVERE, "Error doing XYZ", e);
        }

        logger.exiting(getClass().getName(), "doIt");
    }
}

 

 

 Java Logging: Logger類

爲了產生一條message,你能夠調用如下方法:函數

//log 組產生指定level上的message
log (Level level, String message); log (Level level, String message, Object param1); //對象信息被插入到message中 log (Level level, String message, Object[] params); //示例: logger.log(Level.SEVERE, "Hello logging: {0}, {1}",     new Object[] {"P1", "P2"}); 注意傳參數的格式 log (Level level, String message, Throwable t); log (LogRecord record);
//在log()的基礎上增長了sourceClass和sourceMethod倆個參數,用來講明這條message產生自那個類的那個方法。 logp (Level level, String sourceClass, String sourceMethod, String msg); logp (Level level, String sourceClass, String sourceMethod, String msg, Object param1); logp (Level level, String sourceClass, String sourceMethod, String msg, Object[] params); logp (Level level, String sourceClass, String sourceMethod, String msg, Throwable t);
//在logp()基礎上增長了bundle。Resource bundle是一些鍵值對,主要用於國際化 logrb(Level level, String sourceClass, String sourceMethod, String bundle, String msg); logrb(Level level, String sourceClass, String sourceMethod, String bundle, String msg, Object param1); logrb(Level level, String sourceClass, String sourceMethod, String bundle, String msg, Object[] params); logrb(Level level, String sourceClass, String sourceMethod, String bundle, String msg, Throwable t); entering(String sourceClass, String sourceMethod); entering(String sourceClass, String sourceMethod, Object param1); entering(String sourceClass, String sourceMethod, Object[] params); exiting (String sourceClass, String sourceMethod); exiting (String sourceClass, String sourceMethod, Object result); fine (String message); finer (String message); finest (String message); config (String message); info (String message); warning (String message); severe (String message); throwing(String sourceClass, String sourceMethod, Throwable t);

//幾個重要的函數
void addHandler(Handler handler) Add a log Handler to receive logging messages. 每個Handler能夠調用setFormatter函數設置輸出格式
void setFilter(Filter newFilter) Set a filter to control output on this Logger.
void setLevel(Level newLevel) Set the log level specifying which message levels will be logged by this logger.

 

 原文地址:在這裏this

相關文章
相關標籤/搜索