博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

log4j笔记

Posted on 2009-08-11 21:50  袁立  阅读(117)  评论(0编辑  收藏  举报


A.日志的作用:

 1.记录程序运行时的出错信息,便于软件开发人员分析错误的原因,修正bug;
 2.充当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息;
 3.监视程序运行的状况,周期性地记录到文件或数据库中,以便日后进行统计分析;

 

B.log4j的主要组件:

 1.Logger;---日志记录器
 2.Appender;---控制日志在什么地方输出
 3.Layout;---控制日志以什么样的格式输出

 

B.1.Logger组件:

 1.记录器分为根记录器和自记录器,根记录器为与记录器层次中的顶部,它永远存
 在,且不能通过名字检索或引用,可以通过调用org.apache.log4j.Logger类的静态
 方法getRootLogger()获取,而其他的子记录器则通过org.apache.log4j.Logger类的
 静态方法getLogger(String name)来实例化。

 2.记录器有一个重要的属性---日志级别
   a.日志级别分为5个级别,他们由小到大一次为:DEBUG<INFO<WARN<ERROR<FATAL,
   他们在org.apache.log4j.Level类中定义,是枚举类型。
   b.不同的日志具有不同的级别。
   c.1. 如果logger的级别为DEBUG,则logger会记录DEBUG级别和DEBUG级别以上的日志信息
   c.2. 如果logger的级别为INFO,则logger会记录INFO级别和INFO级别以上的日志信息,不会
   记录INFO级别以下的日志信息
   c.3. 依次类推.....

 3.Logger记录器的常用方法如下:
   a.public static Logger getRootLogger();
   b.public static Logger getLogger(String name);

   c.public void debug(Ojbect message);
   d.public void info(Ojbect message);
   e.public void warn(Ojbect message);
   e.public void error(Ojbect message);
   f.public void fatal(Ojbect message);

 

B.2.Appender组件:

 1.日志输出目的地如下:
   a.输出到控制台;
   b.文件;
   c.GUI组建;
   d.远程嵌套接字服务器;
   e.JMS;
   f.NT事件记录器;
   g.UNIX Syslog守护进程;

   注意:1.我们常用的两种为:输出到控制台和文件,同时日志信息可以被异步地输出;


  2.一个记录器可以有多个Appender,通过调用Logger的addAppender()方法来
  增加Appender;

 2.与上对应的Appender如下:

   //输出到控制台;
   a.org.apache.log4j.ConsoleAppender;
   //输出目的地为文件
   b.org.apache.log4j.FileAppender;
   //按照用户指定的时间或日期频率滚动产生日志文件
   c.org.apache.log4j.DailyRollingAppender;
   //当文件达到一定的尺寸是,备份日志文件;
   d.org.apache.log4j.RollingFileAppender;

   注意:每个记录器都有一个继承标记,用于决定记录器是否可以继承其父记录器的
   Appender,这个标记可以通过调用Logger类的setAdditivity(boolean additive)方
   法来设置,默认情况下,这个标记被设置为true。需要注意的是,对于Appender的
   继承,是一种叠加性继承,而且后代记录器之继承其父记录器的Appender,而不考
   虑更远的祖先的情况

 

B.3.Layout组件:
 
 1.一个Appender只能有一个Layout,主要有以下几种Layout:

      //SimpleLayout的输出由日志的级别+"-"+日志消息组成。例如DEBUG-Hello world.
   a. org.apache.log4j.SimpleLayout;

      //以HTML表格的方式输出日志信息
   b. org.apache.log4j.HTMLLayout;
     
      //XMLLayout的输出有一系列在log4j.dtd中定义的<log4j:event>元素组成的.
   c. org.apache.log4j.XMLLayout;

      // TTCCLayout的输出由时间(time)、线程(thread)、类别(category)和
      嵌套的诊断上下文(context)信息组成,TTCCLayou的命名有这四个单词的
      首字母组成的.
   d. org.apache.log4j.TTCCLayout;

             //PatternLayout提供了和C语言的printf()方法一样的灵活性,程序员可以按照
      一定的转换模式指定日志的信息输出格式。
   e. org.apache.log4j.PatternLayout;
 
 2.常用转换符和其作用

    转换字符   作用
        %c   用于输出日志事件的类别(category)
        %d   用户输出日志事件的日期如:%d{HH:mm:ss,SSS}
        %p   用于输出日志事件的级别
        %t   用于输出日志事件的线程名字
        %%   序列"%%",将输出一个单独的%
        %m   日志消息
        %M   日志输出的方法
        %n   用于换行
    [%-5p]或%p   用于输出日志事件的级别
                .......


C.log4j的应用:

 1.读取配置文件的方式:
   a.BasicConfiguration.configure()//根记录器
   b.PropertyConfigurator.configure(String configFileName)//key="值" (java中常用)
   c.DOMConfigurator.configure(String filename)

 

 2.配置Logger组件:

   a.配置根记录器
     log4j.rootLogger=[level][appenderName1][appenderName2]....
     其中level指定日志级别,可以为(OFF,DEBUG,INFO,WARN,ERROR,FATAL,ALL)
     可以指定多个Appender
   b.配置其他记录器
     log4j.logger.loggerName=[level][appenderName1][appenderName2]....

 

 3.配置Appender组件:
   a. log4j.appender.appenderName=完整的类名
   b. log4j.appender.appenderName.option1=value1;
      ...
   c. log4j.appender.appenderName.optionN=valueN;

 

 4.配置Layout组件:
   a. log4j.appender.appenderName.layout=完整的类名
   b. log4j.appender.appenderName.layout.option1=value1
      ...
   c. log4j.appender.appendername.layout.optionN=valueN


D.log4j配置文件的示例:

 1.log4j_1.properties
   #根记录器的日志级别是ERROR,在这个级别以下的日志信息见被忽略。
   #为根记录器指定名字为console的Appender
   log4j.rootLogger=ERROR,console

   #定义bookstoreLogger记录器,没有设置日志级别,将继承根记录器的级别。
   #为bookstoreLogger记录器指定名字为file的Appender,bookstoreLogger
   记录器还将继承根记录的Appender.
   log4j.logger.bookstoreLogger=,file

   #定义一个名字为console的Appender,它的类型是ConsoleAppender。
   log4j.appender.console=org.apache.log4j.ConsoleAppender
   #console Appender 使用的Layout是SimpleLayout。
   log4j.appender.console.layout=org.apache.log4j.SimpleLayout

   #定义一个名字为file的Appender,它的类型是FileAppender。
   log4j.appender.file=org.apache.log4j.FileAppender
   #指定file Appender输出的日志文件的名字和存放路径.
   log4j.appender.file.File=F:JSPLession/ch19/WEB-INF/ch19.log

   #file Appender 使用的Layout是PatternLayout.
   log4j.appender.file.layout=org.apache.log4j.PatternLayout
   #指定日志信息的输出格式
   log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd  HH:mm:ss}
   [%c]-[%-5p]%m%n%n


  2.log4j_2.properties
    log4j.rootLogger=EEROR,console
    log4j.logger.bookstoreLogger=,file

    log4j.additivity.bookstoreLogger=false

           log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.layout=org.apache.log4j.SimpleLayout

    #log4j.appender.file=org.apache.log4j.FileAppender
    #log4j.appender.file.File=F:JSPLession/ch19/WEB-INF/ch19.log

    #定义一个名字为file的Appender,它的类型是RollingFileAppender。
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    #设置最大文件尺寸为1MB,当日志文件大小达到1MB是,开始备份到备份文件中。
    log4j.appender.file.MaxFileSize=1MB
    #设置备份文件的最大数目为2个文件.
    log4j.appender.file.MaxBackupIndex=2
    #指定file Appender输出的日志文件的名字和存放路径.
    log4j.appender.file.File=F:JSPLession/ch19/WEB-INF/ch19roll.log

    #file Appender 使用的Layout是PatternLayout.
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #指定日志信息的输出格式
    log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
    [%c]-[%-5p]%m%n%n


E.结论性的东西:
 1.
 logger.setLevel(Level.ALL);//输出5条日志信息
 logger.setLevel(Level.DEBUG);//输出5条日志信息
 logger.setLevel(Level.INFO);//输出4条日志信息
 logger.setLevel(Level.WARN);//输出3条日志信息
 logger.setLevel(Level.ERROR);//输出2条日志信息
 logger.setLevel(Level.FATAL);//输出1条日志信息
 logger.setLevel(Level.OFF);//输出0条日志信息