Logger是log4j操作的核心对象,Logger的Name是区分大小写的,而且支持层级命名规则,类似于Java类的定义,通过命名空间来区别。
Logger的等级制度
如果1个Logger的name前缀是.及祖辈的Logger的name,那么就说1个Logger是另1个Logger的祖先。类似地,"java"是"java.util"这个Logger的父亲,是"java.util.Vector"这个Logger的祖先。这种命名模式与很多开发语言非常相似。
Root Logger位于Logger最高层级,也就是说,它是所有Logger的祖先。它有2个特别的地方:
1)、它总是存在;
2)、不能用name来获取它;
调用类的静态方法Logger.getRootLogger可以获取Root Logger。所有其他的Loggers都是调用类的静态方法Logger.getLogger来实例化的。Logger.getLogger需要传入要创建的Logger 的name作为参数。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);
}
你也可以给Logger被指定1个级别,可选的级别有:TRACE, DEBUG, INFO, WARN, ERROR , FATAL。这些可选的级别都定义在org.apache.log4j.Level类中。
如果给定的Logger没有指定level,那么它会从最亲近的父辈中继承level。为了确保所有的Logger都能继承到level,所以root Logger总是有1个level。下面例子给出关于level继续的具体说明。
例子1:3个都没有指定level,所以都使用root的level。
Logger Name | 指定的level | 最终的level |
root | Proot | Proot |
X | none | Proot |
X.Y | none | Proot |
X.Y.Z | none | Proot |
Logger Name | 指定的level | 最终的level |
root | Proot | Proot |
X | Px | Px |
X.Y | Pxy | Pxy |
X.Y.Z | Pxyz | Pxyz |
Logger Name | 指定的level | 最终的level |
root | Proot | Proot |
X | Px | Px |
X.Y | none | Px |
X.Y.Z | Pxyz | Pxyz |
Logger Name | 指定的level | 最终的level |
root | Proot | Proot |
X | Px | Px |
X.Y | none | Px |
X.Y.Z | none | Px |