Log4j简介

来源:互联网 发布:usb数据采集卡型号 编辑:程序博客网 时间:2024/05/22 10:56

Log4j的简介

   日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录。


log4j的特性列表:
    在运行速度方面进行了优化
    使用基于名称的日志(logger)层次结构
    是fail-stop的
    是线程安全的
    不受限于预定义的实用工具集
    可以在运行时使用property和xml两种格式的文件来配置日志记录的行为
    在一开始就设计为能够处理Java异常
    能够定向输出到文件(file)、控制台(console)、java.io.OutputStream、java.io.Writer、远程服务器、远程Unix Syslog守护者、远程JMS监听者、NT EventLog或者发送e-mail
    使用DEBUG、INFO、WARN、ERROR和FATAL五5个级别
    可以容易的改变日志记录的布局(Layout)
    输出日志记录的目的地和写策略可以通过实现Appender接口来改变
    支持为每个日志(logger)附加多个目的地(appender)
    提供国际化支持 


    Log4j中有三个主要的组件,它们分别是 Logger、Appender和Layout。
    
       

        Log4j中将要输出的Log信息定义了5种级别,依次为DEBUG、INFO、WARN、ERROR、FATAL和OFF,如果配置OFF则不打印出任何信息。
    当输出时,只有级别高过配置中规定的级别的信息才能真正的输出,这样就很方便的来配置不同情况下要输出的内容,而不需要更改代码。

Logger
    Log4j 允许开发人员定义多个Logger,每个Logger拥有自己的名字,Logger之间通过名字来表明隶属关系。
    有一个Logger称为Root,它永远存在,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法获得,其它Logger通过 Logger.getLogger(String name)方法。
    
    log4j.rootLogger=INFO, stdout, logfile
        此句为将等级为INFO的日志信息输出到stdout和logfile这两个目的地,stdout和logfile的定义在下面的代码,可以任意起名。
        
        可在配置文件中方便地配置存在继承关系的Logger组件,凡是在符号“.”后面的组件都会成为在符号“.”前面的Logger组件的子类。
        例如:
       log4j.logger.ParentLogger=WARN
       log4j.logger.ParentLogger.SonLogger=,file
        以上代码中, SonLogger是ParentLogger的子类Logger组件。
        
        默认情况下,logger的additive标志被设置为true,表示未被分配level的logger将继承离他最近的父logger的所有appenders。该选项可以被重新设置,表示子logger将不再继承父logger的appenders。
        
        logger以包为单位指定日志等级
        log4j.logger.com.serlvet =DEBUG
        指定com.servlet包下的所有类的等级为DEBUG。
        
Appender
    Appender 则是用来指明将所有的log信息存放到什么地方,Log4j中支持多种appender,一个Logger可以拥有多个Appender,也就是你既可以将Log信息输出到屏幕,同时存储到一个文件中。每个appender都和一个layout相联系;layout的任务是格式化用户的logging request。
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
        此句为定义名为stdout的输出目的地是哪种类型,可以是
        org.apache.log4j.ConsoleAppender(控制台),
        org.apache.log4j.FileAppender(文件),
        org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
        org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
        org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
        各种类型的Appender有特定的配置选项;具体可参照本文最后的示例,或查看官方文档。
        
Layout
    Layout 的作用是控制Log信息的输出方式,也就是格式化输出的信息。
    
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
        此句为定义名为stdout的输出端的layout是哪种类型,可以是
        org.apache.log4j.HTMLLayout(以HTML表格形式布局),
        org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
        org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
        org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

    log4j.appender.stdout.layout.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n
        如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:
        [QC]是log信息的开头,可以为任意字符,例如项目简称。
        %p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
        %d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2012年10月18日 22:10:28,921
        %r: 输出自应用启动到输出该log信息耗费的毫秒数
        %c: 输出日志信息所属的类目,通常就是所在类的全名
        %t: 输出产生该日志事件的线程名
        %l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:LogTest.main (LogTest.java:23)
        %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
        %%: 输出一个"%"字符
        %F: 输出日志消息产生时所在的文件名称
        %L: 输出代码中的行号
        %m: 输出代码中指定的消息,产生的日志具体信息
        %n: 输出一个回车换行符,Windows平台为"/r/n",Unix平台为"/n"输出日志信息换行可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
        1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
        2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。
        3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
        4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边较远输出的字符截掉。