Log4j Study (1)

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”对应后面的具体日志信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值