Apache Log4j 学习笔记

字体大小: 中小 标准 ->行高大小: 标准

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的继承树。

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/57991.html