您的位置:首页 > 其它

Log4j Study (1)

2005-10-28 20:56 351 查看
1.log4j介绍 据说一个系统有4%的代码是logging的....以前大部分的错误调试和一些输出信息都是通过System.out.println()实现的。。但对于比较大的系统或程序就显得代码上很乱了
Log4j拥有几个优点:
首先,它提供关于运行程序的准确的环境。一旦代码被插入,不需要人工干预就可以产生调试信息。
其次,日志输出可以被有计划的保存在永久媒体中以便日后研究。
另外,除了在开发周期中,一个充分详尽的日志包可以被用来作为以后的统计工具。
Log4j当然还有它的缺点,它可能减慢程序。如果太详细,它可能导致屏幕盲目滚动。排除这些情况,Log4j是可靠的,快速的,可以扩展的。因为日志很少是一个应用程序的主要目的。
2. Log4J构成
Log4J主要由三大组件构成:
1) Logger: 负责生成日志,并能够对日志信息进行分类筛选,通俗地讲就是决定什么日志信息应该被输出,什么日志信息应该被忽略;即记录器
2) Appender: 定义了日志信息输出的目的地,指定日志信息应该被输出到什么地方,这些地方可以是控制台、文件、网络设备等;即存放器
3) Layout: 指定日志信息的输出格式;即布局
3.记录器
log4j允许程序员定义多个记录器,每个记录器有自己的名字,记录器之间通过名字来表明隶属关系(或家族关系)。列如,记录器a.b,与记录器a.b.c之间是父子关系,而记录器a与a.b.c之间是祖先与后代的关系,父子关系是祖先与后代关系的特例。通过这种关系,可以描述不同记录器之间的逻辑关系。
  有一个记录器叫根记录器,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法取得它,而一般记录器通过Logger.getLogger(String 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 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);
}
Log4J采用日志级别机制,以下代码配置了一个Logger组件,名为LcLogger,并为它分配了一个日志级别WARN:
log4j.logger.LcLogger = WARN
一共有五种日志级别:FATAL、ERROR、WARN、INFO和DEBUG。FATAL级别最高,DEBUG级别最低。
为什么采用日志级别?
在我们写程序的时候,为了调试程序,会在很多容易出错的地方输出大量的日志信息。当程序调用完毕,不再需要输出这些日志信息了。那怎么办?以前的做法是把每个程序中输出日志信息的代码删除。对于大的应用程序,这种做法既费力又费时,几乎是不现实的。通过设置日志级别,只有当它的级别大于或等于Logger组件配置的日志级别时,这个方法才会被真正执行。对于log()方法,只有当它的参数Priority指定的日志级别大于或等于Logger组件配置的日志级别时,这个方法才会被执行。
这里,假如不需要输出级别为WARN的日志信息,则可以将LcLogger组件的级别调高,这样WARN级别和以下级别的日志就不会输出了。这比修改源程序显然要方便得多。
级别的例子:
// 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");
4.存放器
Appender支持日志信息输出到以下目的地:
. 控制台(Console)
. 文件(File)
. GUI组件(GUI component)
. 套接口服务器(Remote socket server)
. NT的事件记录器(NT Event Logger)
. UNIX Syslog守护进程(Remote UNIX Syslog daemon)
一个Logger日志信息可以同时输出到多个目的地。例如,要为LcLogger配置两个Appender: 一个是file, 一个是console,则可以采用以下配置代码:
log4j.logger.LcLogger=WARN,file,console
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=c:/log.txt
log4j.appender.console=org.apache.log4j.ConsoleAppender
5. Layout组件介绍
1) Layout组件有以下几种类型:
org.apache.log4j.HTMLLayout: 以HTML表格形式布局;
org.apache.log4j.PatternLayout: 可以灵活地指定布局模式;
org.apache.log4j.SimpleLayout: 包含日志信息的级别和信息字符串;
org.apache.log4j.TTCCLayout: 包含日志产生的时间、线程和类别等信息;
例如,要为名为console的Appender配置SimpleLayout布局,可以采用如下配置代码:
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
2) PatternLayout详细说明
PatternLayout可以让开发者依照ConversionPattern去定义输出格式,开发者可以通过一些预定义的符号来指定日志的内容和格式:
%r 自程序开始后消耗的毫秒数
%t 表示日志记录请求生成的线程
%p 表示日志语句的优先级别
%r 与日志请示相关的类别名称
%c 日志信息所在的类名
%m%n 表示日志信息的内容
例如:要为名为file的Appender配置PatternLayout布局,可以采用以下代码:
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%t %p - %m%n
以上代码在输出日志可形式如下:
THREAD -1 WARN - This is a log message from NetCTOSSLogger
以上内容中,“%t”对应“THREAD-1”,“%p”对应“WARN”,“%m%n”对应后面的具体日志信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: