log4j 1

来源:互联网 发布:软件系统集成方案模板 编辑:程序博客网 时间:2024/06/18 07:34

log4j 1官网:http://logging.apache.org/log4j/1.2/

文档:http://logging.apache.org/log4j/1.2/manual.html

Loggers, Appenders and Layouts

Log4j有三个主要组成部分:loggers, appenders和layouts。这三类组件组合起来就能是开发者根据信息类型和等级记录日志,能够在运行时控制这些信息的格式,打印到哪去。

Logger hierarchy

任何的日志API比起普通的sysout的最重要的好处是,他们能够显示一部分,隐藏一部分。用户可以根据自己的需要定义日志空间。以前需要用户选择目录作为包的最主要的概念。但是,从1.2版本开始,Logger类代替了Category类。

Loggers用实体命名。Logger名称都是大小写敏感的,并且遵循命名等级规则:

Named Hierarchy
一个logger是另个logger的祖先,只有他的名字是另一个名字的前缀。一个logger是另一个logger的双亲,只要他们之间没有其他的祖先。

例如,一个logger的名称是“com.foo”,是另一个logger,名称为“com.foo.Bar”的双亲。相似的,“java”是“java.util”的双亲,是“java.util.Vector”的祖先。大多数程序员应该对这种命名模式熟悉。

根logger位于logger等级的顶点。他有两点独特的地方:

  1. 他始终存在,
  2. 不能根据名称获取。

调用类的静态方法Logger.getRootLogger能获取他。其他所有的loggers能够通过静态方法Logger.getLogger实例化和获取。这个方法用logger的名称作为参数。Logger中的一些基本的方法列在下面:

 package org.apache.log4j; public class Logger {   // Creation & retrieval methods:   public static Logger getRootLogger();   public static Logger getLogger(String name);   // printing methods:   public void trace(Object message);   public void debug(Object message);   public void info(Object message);   public void warn(Object message);   public void error(Object message);   public void fatal(Object message);   // generic printing method:   public void log(Level l, Object message);}

可以给Loggers设置等级。可能的等级是:

TRACE,DEBUG,INFO,WARN,ERROR andFATAL

都定义在org.apache.log4j.Level类中。我们不鼓励,但是你可以定义自己的等级,通过继承Level类。后面会介绍一个比较好的方法。

如果给定了一个logger没有指定等级,那么它会从它最近的祖先继承他的等级。正式的说:

Level Inheritance
给定一个logger C,他继承的等级是,他的祖先的第一个不是null的等级,从C开始往上一直到root logger。

(省略。。。)

Appenders and Layouts

能够选择性地使用日志只是一部分。Log4j允许日志打印到多个目的地。用log4j的话说,打印目的地被称为一个appender。当前,可用的appenders有console、file,GUI组件,远程socket服务,JMS,NT Event Loggers,和远程UNIX Syslog daemons。也可以异步的记录。

一个logger可用有多个appender。

addAppender方法可以用来给logger添加appender。对于一个logger的每个起作用的logging请求,将会被送到logger的所有的appenders中,还有等级中更高级的appenders中。换句话说,appenders从logger等级中继承,比如C,C和C的子孙日志将会打印到文件和控制台上。
看下图就明白了,一个logger上的日志会打印到它自己和它祖先的appenders上。如果logger的additivity flag设置为false,就不往上打印了(这个包含)。
这里写图片描述

(省略。。。)

# Set root logger level to DEBUG and its only appender to A1.log4j.rootLogger=DEBUG, A1# A1 is set to be a ConsoleAppender.log4j.appender.A1=org.apache.log4j.ConsoleAppender# A1 uses PatternLayout.log4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

第一行的意思是:将rootLogger的等级设为DEBUG,它的appender为A1。

原创粉丝点击