log4j代码端之level含义

本文详细介绍了Log4j的基本组成元素,包括Logger、Appenders及Layouts,并讲解了如何通过不同层次设置日志级别,实现灵活的日志记录与管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Quotes: http://blog.youkuaiyun.com/talentxie/archive/2009/02/07/3867941.aspx

 

   log4j主要包含三个组件,分别对应为:Loggers、appenders与layouts。他们彼此协作,使得程序可以依据不同层次记录日志,在运行时控制这些日志的输出格式以及将这些日志记录到对应的场所。

   再进入正式level(层次),先介绍一下命名层次的概念. 所谓命名层次,就是使用点号进行分离,点号之前的对象是点号之后对象的父结点。例如"com.foo","com"为"foo"的父节点,相反"foo"就为"com"的子节点;再如"com.foo.Bar"中,"com"为"Bar"的祖先结点等.......

 logger是按照层次来建立的,因而整个框架中存在着一个根结点。这个根有两个特殊的性质:

  1. 一直都存在

  2. 不能通过名来获取这个对象

 当然,既然设计了这个类并且其又是存在的,我们可以通过Logger.getRootLogger获取这个根结点对象。对于其他非根结点logger对 象,可以通过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);
}

 

x,y,z均继承自root,同时他们之间并没有分配自己的级别,所以全都继承自root的 Proot级别。

 

 

日志对象名自行分配级别继承级别
rootProotProot
XPxPx
X.YPxyPxy
X.Y.ZPxyzPxyz

 

上图中x,y,z均自行分配了级别,因而他们均使用自己的分配级别

日志对象名自行分配级别继承级别
rootProotProot
XPxPx
X.YnonePx
X.Y.ZnonePx

同理,因为y没有分配对应的级别。因而其继承x对应的分配级别功能。

      对于logger对象,通过调用上文提及的debug、info、warn、error、fatal函数,分别进行对象级别的日志记录。下文是一段演示代码:

   // get a logger instance named "com.foo"
Logger logger = Logger.getLogger("com.foo");

// Now set its level. Normally you do not need to set the
// level of a logger programmatically. This is usually done
// in configuration files.
logger.setLevel(Level.INFO);

Logger barlogger = Logger.getLogger("com.foo.Bar");

// This request is enabled, because WARN >= INFO.
logger.warn("Low fuel level.");

// This request is disabled, because DEBUG < INFO.
logger.debug("Starting search for nearest gas station.");

// The logger instance barlogger, named "com.foo.Bar",
// will inherit its level from the logger named
// "com.foo" Thus, the following request is enabled
// because INFO >= INFO.
barlogger.info("Located nearest gas station.");

// This request is disabled, because DEBUG < INFO.
barlogger.debug("Exiting gas station search");

    正如上面程序清单列出的,logger可以被赋予不同的层次级别(level)。分别为debug、info、warn、error、 fatal五个,优先级依次上升;所以在应用中,当我们设定了级别为info,那么当调用debug级别时,log4j是不会将这个函数的内容记录到对应 的appenders当中的,只有级别大于等于info才能。同时这些级别对象定义在Level类中。在log4j框架中,级别功能是可以继承的;根据上 文提及的命名层次,祖先结点设定的级别是可以被子孙结点所继承的。下面给出几张图加以解释:

日志对象名自行分配级别继承级别
rootProotProot
XnoneProot
X.YnoneProot
X.Y.ZnoneProot

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值