歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Apache Log4j 學習筆記

Apache Log4j 學習筆記

日期:2017/2/28 15:58:09   编辑:Linux教程

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;
import
org.apache.log4j.BasicConfigurator;
import
org.apache.log4j.Level;

public class
Log4jTest {

public static void
main(String argv[]) {

// Create a logger by the name of class Log4jTest.

Logger logger = Logger.getLogger(Log4jTest.class);
// Use the default configuration.

BasicConfigurator.configure();
// Set the logger level to Level.INFO

logger.setLevel(Level.INFO);
// This request will be disabled since Level.DEBUG < Level.INFO.

logger.debug("This is debug.");
// These requests will be enabled.

logger.info("This is an info.");
logger.warn("This is a warning."
);
logger.error("This is an error."
);
logger.fatal("This is a fatal error."
);

}

}

關於logger的兩點說明

  • 用同名參數調用Logger.getLogger(String name)將返回同一個logger的引用。故可以在一個地方配置logger,在另外一個地方獲得配置好的logger,而無須相互間傳遞logger的引用。

  • logger的創建可以按照任意的順序,即,父logger可以後於子logger被創建。log4j將自動維護logger的繼承樹。

Copyright © Linux教程網 All Rights Reserved