Apache Logging Project Homepage: http://logging.apache.org
Log4j的類圖
Logger - 日志寫出器,供程序員輸出日志信息
Appender - 日志目的地,把格式化好的日志信息輸出到指定的地方去
ConsoleAppender - 目的地為控制台的Appender
FileAppender - 目的地為文件的Appender
RollingFileAppender - 目的地為大小受限的文件的Appender
Layout - 日志格式化器,用來把程序員的logging request格式化成字符串
PatternLayout - 用指定的pattern格式化logging request的Layout
Logger:日志寫出器
Logger對象是用來取代System.out或者System.err的日志寫出器,用來供程序員輸出日志信息。
Logger的輸出方法
Logger類對象提供一系列方法供程序員輸出日志信息:
public void debug(Object msg);
public void debug(Object msg, Throwable t);
public void info(Object msg);
public void info(Object msg, Throwable t);
public void warn(Object msg);
public void warn(Object msg, Throwable t);
public void error(Object msg);
public void error(Object msg, Throwable t);
public void fatal(Object msg);
public void fatal(Object msg, Throwable t);
Logger的命名規則
Logger由一個String類的名字識別,logger的名字是大小寫敏感的,且名字之間具有繼承的關系,子名有父名作為前綴,用點號.分隔。如:x.y是x.y.z的父親。
根logger (root logger)是所有logger的祖先,它具有如下屬性:1)它總是存在的;2)它不可以通過名字獲得。
通過調用public static Logger Logger.getRootLogger()獲得root logger;通過調用public static Logger Logger.getLogger(String name)或者public static Logger Logger.getLogger(Class clazz)獲得(或者創建)一個named logger。後者相當於調用Logger.getLogger(clazz.getName())。
在某對象中,用該對象所屬的類為參數,調用Logger.getLogger(Class clazz)以獲得logger被認為是目前所知的最理智的命名logger的方法。
Log level
每個logger都被分配了一個日志級別 (log level),用來控制日志信息的輸出。未被分配level的logger將繼承它最近的父logger的level。
每條輸出到logger的日志請求(logging request)也都有一個level,如果該request的level大於等於該logger的level,則該request將被處理(稱為enabled);否則該request將被忽略。故可得知:
logger的level越低,表示該logger越詳細
logging request的level越高,表示該logging request越優先輸出
Level類中預定義了五個level,它們的大小關系如下:
Level.ALL < Level.DEBUG < Level.INFO < Level.WARN < Level.ERROR < Level.FATAL < Level.OFF
示例代碼
以下代碼將用自己所屬的類為參數,創建一個logger,啟用默認配置,設置其level並向其輸出若干logging request。
<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->import org.apache.log4j.Logger;關於logger的兩點說明
用同名參數調用Logger.getLogger(String name)將返回同一個logger的引用。故可以在一個地方配置logger,在另外一個地方獲得配置好的logger,而無須相互間傳遞logger的引用。
logger的創建可以按照任意的順序,即,父logger可以後於子logger被創建。log4j將自動維護logger的繼承樹。