Apache Log4j 学习笔记

Apache Logging Project Homepage: http://logging.apache.org

Log4j的类图

      Apache Log4j 学习笔记

  • Logger - 日志写出器,供程序员输出日志信息

  • Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去

    • ConsoleAppender - 目的地为控制台的Appender

    • FileAppender - 目的地为文件的Appender

    • RollingFileAppender - 目的地为大小受限的文件的Appender

  • Layout - 日志格式化器,用来把程序员的logging request格式化成字符串

    • PatternLayout - 用指定的pattern格式化logging requestLayout

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.yx.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),用来控制日志信息的输出。未被分配levellogger将继承它最近的父loggerlevel

每条输出到logger的日志请求(logging request)也都有一个level,如果该requestlevel大于等于该loggerlevel,则该request将被处理(称为enabled);否则该request将被忽略。故可得知:

  • loggerlevel越低,表示该logger越详细

  • logging requestlevel越高,表示该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的继承树。

相关推荐