`
qushaoyan
  • 浏览: 7253 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

一、背景前沿

项目中经常性的会遇到有日志输出的情况,例如:system.out,或者是用于调试,或者用于记录系统的运行状态。存在这么一种需求,首先,希望日志的输出地除了控制台consol,还希望能够直接写入到文件中,以及可以自动的管理日志文件的大小;同时,还可以设置当前日志的严重级别,并根据严重级别控制输出的类别;最后一点,就是性能的考虑,要做到日志的输出不能够影响系统的总体性能。Log4j便能满足这么一种需求,它是开源的用于日志输出的组件,用于替代传统的system.out等日志输出。

二、log4j概述

1Log4j的官网地址:http://logging.apache.org

2Log4j类图:

 

 

简单介绍类图结构:

Logger,日志写出器,程序员使用的最直接的类,用于日志输出。

Appender,日志目的地,用于控制日志的输出地,例如:consoleappender输出到控制台,fileappernder输出到文件中。

Layout:日志格式器,用于控制输出日志的格式,样式等。

至于各个类提供的具体方法,可以参考附件中的log4japi文档,或者参考同目录下的log4j学习笔记。

 

三、log4j使用说明

1、    到官网下载log4jxxx.jar,并放到项目中的lib下。

2、    添加配置文件(log4j.properties,或者log4j.xml),可以从jar包将例子配置文件复制出来,再根据实际需要修改。

3、    在需要添加日志输出的类中,追加logger定义,在相应的方法中添加合适级别的输出。

4、    请看下面一段示例代码:

 

public class Log4jTest {

    public static void main(String argv[]) {

   

        // Create a logger by the name of class Log4jTest.

        Logger logger = Logger.getLogger(Log4jTest.class);

 

        // Use the default configuration.

        BasicConfigurator.configure();

 

        // Set the logger level to Level.INFO

        logger.setLevel(Level.INFO);

 

        // This request will be disabled since Level.DEBUG < Level.INFO.

        logger.debug("This is debug.");

 

        // These requests will be enabled.

        logger.info("This is an info.");

        logger.warn("This is a warning.");

        logger.error("This is an error.");

        logger.fatal("This is a fatal error.");

        

        return;

    }

}

      

5、项目中log4j对象之间的层次关系

如上所述,log4j用于项目中的日志输出;在需要的时候,在指定的类中定义logger对象,然后在需要日志输出的地方调用logger.debug/info/error/…(“日志内容”),即可。即,需要为不同的类定义各自的logger对象,项目中的类在packe级别存在层次关系,那么同样的logger对象也存在着层次关系,例如:x.yx.y.z的上一层父亲。

首先,每个项目中都有一个且唯一的一个root logger(根logger对象),所有的logger类都继承该根logger,所谓继承指的是继承root的配置项。定义log4j.properties以及log4j.xml,就是对root logger进行的配置。

其次,可以通过方法setAdditivity()设置每个logger是否继承父亲的配置。默认情况下,是true,继承父亲配置。下面各个子logger也可以根据自己的需要,通过编程的方式(调用loggerAPI)实现配置。

最后,logger对象之间虽然存在着父子关系,但是对其创建顺序没有影响。可以先创建子logger,再创建父loggerlog4j会自动的维护关系树。

 

四、log4j具体配置文件,配置项说明

1、配置文件简述

Log4j有两个配置文件,一个是log4j.properties,一个是log4j.xml,两个配置文件都是用于配置根logger对象的(root logger)。两个配置文件只是格式不一样,但是配置的内容都是一样的,包含3个配置:logger级别(level),logger的输出目的地(appender)logger的输出样式(layout)

    其中,由于log4j的记载过程,决定了log4j.xml优先级要高于log4j. properties配置文件。下面将简述其加载初始化过程。

    如果用户在static初始化块,显示编程方式加载了用户自定义的配置文件(可以是任意名字的.properties,也可以是任意名字的.xml)文件,XXXConfigurator.configure(配置文件名字),那么将加载用户指定的该配置文件。

       如果上述加载成功,则不会再去读取系统其他配置文件。如果上述加载失败,则会先在类路径下寻找log4j.xml文件,加载处理。

       如果上述加载成功,则不会再去读取系统的其他配置文件。如果上述加载失败,则会在类路径下寻找log4j.properties文件,加载处理。

2、配置API说明

       root logger的配置可以通过上述配置文件的方式实现。

       Root logger,普通级别logger配置,也可以通过调用API方式实现,下面贴出一个简单的例子:

public   class  testlog4jdft   {

    public   static   void  main(String[] args)   {

     

    //创建一个logger日志写出器对象

       Logger logger  =  Logger.getLogger(testlog4jdft. class );

      

       //启用默认配置

//       BasicConfigurator.configure();

      // DOMConfigurator.conf

     //  PropertyConfigurator.configure(configFilename)

      

       //设置日志级别

//       logger.setLevel(Level.TRACE);

      

       //logger设置appender:日志目的地   

//       ConsoleAppender ca=new ConsoleAppender(new PatternLayout());

//       logger.addAppender(ca);

      

       //以不同的级别输出

       logger.debug( "ququ---- debug " );

       logger.trace("ququ----trace");

       System.out.println("--------------------");

       logger.error( " ququ----error " );

       logger.fatal("ququ-----fatal");

       logger.warn("ququ------warning");

       logger.info("ququ=========info");

    

   }

}

以上说明,logger的配置既可以通过配置文件方式,也可以通过编程的方式实现。

同时,如果采用配置文件方式,配置文件的加载,如果显示指定了配置文件名称,那加载所指定的;否则,默认优先加载xml。即:用户显示指定>log4j.xml>log4j.properties

 

3、配置项说明

可以参考同目录下的,log4j配置详解,或者log4j学习笔记。

 

 

五、编程习惯常见用法

Ø         让每个类都拥有一个private staticLogger对象,用来输出该类中的全部日志信息

Ø         使用xml文件来完成对log4j环境的配置。在项目的main class中的静态初始化块里放log4j环境的配置代码。用XXXConfigurator.configure(配置文件名字)方法加载用户指定的配置文件。注意:在一个项目中,log4j环境只需要被配置一次,而不是在每个使用了logger的类里都需要调用一次 。子logger通常继承root的配置。

Ø         MyClass.class作为参数创建该类的静态Logger对象

 

 

  • 大小: 18.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics