zoukankan      html  css  js  c++  java
  • log4j快速入门

    转自:http://blog.csdn.net/yanwushu/article/details/7581255

    1.引言

      在应用程序中添加日志记录总的来说基于三个目的:

    .监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作

    .跟踪代码运行时轨迹,作为日后审计的依据

    .担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。

    实现日记记录最普通的做法就是在代码中嵌入打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。

    在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。(这个就是log4j的本质,它就是一个类似于打印语句的封装包,而且功能较之打印强大的多!)

    Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

    此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。

    本文只简单地介绍log4j的入门使用方法。 Log4j官方网站: http://jakarta.apache.org/log4j 

    2、Log4j的组件简介


        Log4j中有四个主要的组件,它们分别是 Logger(记录器)、Appender(输出目的地)、Layout(布局器)和信息输出级别。

       .Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。有一个Logger称为Root,它永远 存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()静态方法获得,其它Logger通过 Logger.getLogger(String name)方法。
       .Appender(信息附加器)则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,如 console、files、GUI components、NT Event Loggers等,一个Logger可以拥有多个Appender,也就是你既可以将Log信息输出到屏幕,同时存储到一个文件中。
       .Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息。
       .Log4j中将要输出的Log信息定义了5种级别,依次为DEBUG、INFO、WARN、ERROR和FATAL,当输出时,只有级别高过配置中规定的 级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码,这点实在是方便啊。

    3、Log4j的配置文件


       虽然可以不用配置文件,而在程序中实现配置,但这种方法在如今的系统开发中显然是不可取的,能采用配置文件的地方一定一定要用配置文件。Log4j支持两 种格式的

    配置文件:XML格式和Java的property格式,本人更喜欢后者,首先看一个后者简单的例子吧,如下:

    ###配置根记录器

    ###根记录器的信息输出级别为debug

    ###跟记录器的附加器Appender(输出目的地)是控制台(stdout)和文件(R),也就是后面指定的org.apache.log4j.ConsoleAppender
      log4j.rootLogger=debug, stdout, R

    ###配置名称为stdout的附加器对应的Appender类(这个附加器将日志信息附加到控制台)
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender

    ###配置名称为stdout的附加器对应的Layout类(布局器类)
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

    ###配置名称为stdout的附加器的布局器的转换模式
      # Pattern to output the caller's file name and line number.
      log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

    ###配置名称为R的附加器的对应Appender类(这个附加器是将日志信息附加到文件)
      log4j.appender.R=org.apache.log4j.RollingFileAppender

    ###配置名称为R的附加器的文件
      log4j.appender.R.File=example.log

    ###配置名称为R的附加器的文件最大为100K
      log4j.appender.R.MaxFileSize= 100KB

      # Keep one backup file

    ###配置名称为R的附加器的最大备份索引为1
      log4j.appender.R.MaxBackupIndex=1

    ###配置名称为R的附加器的布局器类(layout)
      log4j.appender.R.layout=org.apache.log4j.PatternLayout
    ###配置名称为R的附加器的布局器的转换模式

      log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n         

       首先,是设置rootLogger,格式为 log4j.rootLogger=[level],appenderName, ...,其中level就是设置需要输出信息的级别,后面是appender的输出的目的地,appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

     配置日志记录器的Appender(信息输出目的地,附加器)

    其语法为
      log4j.appender.appenderName = fully.qualified.name.of.appender.class
      log4j.appender.appenderName.option1 = value1
      ...
      log4j.appender.appenderName.option = valueN 
    Log4j提供的appender有以下几种:
      org.apache.log4j.ConsoleAppender(控制台)
      org.apache.log4j.FileAppender(文件)
      org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
      org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
      org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
    配置记录器的日志信息的layout(格式,布局)

    其语法为:
      log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
      log4j.appender.appenderName.layout.option1 = value1
      ....
      log4j.appender.appenderName.layout.option = valueN 
    Log4j提供的layout有以下几种:
      org.apache.log4j.HTMLLayout(以HTML表格形式布局),
      org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
      org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
      org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息) 

    配置布局器的转换模式(ConversionPattern)
    Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息   %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
      %r 输出自应用启动到输出该log信息耗费的毫秒数 
      %c 输出所属的类目,通常就是所在类的全名 
      %t 输出产生该日志事件的线程名 
      %n 输出一个回车换行符,Windows平台为“ ”,Unix平台为“ ” 
      %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似: 2002年10月18日 22:10:28,921
      %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)



    4、Log4j在程序中的使用 


       要在自己的程序中使用Log4j,首先需要将commons-logging.jar和logging-log4j-1.2.9.jar导入到构建路径中。然后再将log4j.properties放到src根目录下。这样就可以在程序中使用log4j了。

    在类中使用log4j, 首先声明一个静态变量 Logger logger=Logger.getLog("classname");现在就可以使用了,用法如下:logger.debug("debug message")或者logger.info("info message"),看下面一个小例子: 

      import com.foo.Bar;
      import org.apache.log4j.Logger;
      import org.apache.log4j.PropertyConfigurator;


      public class MyApp {

        //声明静态的记录器变量并初始化
        static Logger logger = Logger.getLogger(MyApp.class.getName());


        public static void main(String[] args) {

          //加载配置文件
          PropertyConfigurator.configure("test.properties");//参数为配置文件的全名
          //logger的日志记录方法

          logger.info("information");
          logger.error("error");

          logger.debug("debug");

          .....

        }
      }
     

    本文整理自

    IBM developer Works

    http://www.ibm.com/developerworks/cn/java/l-log4j/index.html 

    和‘java涂鸦’的博客

    http://www.blogjava.net/rickhunter/articles/28133.html 

    IBM的工程师真的很nb,文章思路清晰,例子贴切,对问题理解深刻。推荐这个网站IBM developer Worker

    这位工程师的文章对配置文件的介绍很书面,个人觉得不大好理解,所以做了些注释。希望能给对配置文件理解不深刻的同学们一些帮助&_&。

  • 相关阅读:
    Calling a parent window function from an iframe
    JSON with Java
    Posting array of JSON objects to MVC3 action method via jQuery ajax
    What's the difference between jquery.js and jquery.min.js?
    jquery loop on Json data using $.each
    jquery ui tabs详解(中文)
    DataTables warning requested unknown parameter
    Datatables 1.10.x在命名上与1.9.x
    jQuery 1.x and 2.x , which is better?
    DataTabless Add rows
  • 原文地址:https://www.cnblogs.com/hark0623/p/6893215.html
Copyright © 2011-2022 走看看