然而用google搜了一下,却发现网上没有一个简单直观的说明,于是只好看log4j的官方介绍,终于
理解了log4j的配置用法,以下是我对log4j配置的一点认识,如有谬误还请不吝赐教.
    首先我们搞清楚log4j能干什么,简单来说就是提供一个记录不同级别信息内容的日志工具,
    
    可以把不同级别,不同包路径的信息,以指定格式输出到多种设备(控制台,文件等)
    
    在程序中,可以以以下方式来使用
    
    Log log = org.apache.commons.logging.LogFactory.LogFactory.getLog(yourClassName.class);
    
    log.debug(“debug message ——————-“);
    
    log.info(“info message ******************”);
    
    log.warn(“warn message +++++++++++++++”);
    
    log.error(“error msg=================”);
本文主要讲的是如何配置log4j,先让我们先看看一个典型的log4j配置:
==========log4j.properties==================
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    
    log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n
   
    log4j.appender.fileout=org.apache.log4j.RollingFileAppender
    
    log4j.appender.fileout.File=D:/workspace/log4jtest/log/application.log
    
    log4j.appender.fileout.MaxFileSize=10000KB
    
    log4j.appender.fileout.MaxBackupIndex=10
    
    log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
    
    log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n
   
    log4j.rootCategory=INFO, stdout, fileout
    
    log4j.logger.com.wolfsquare.log2=DEBUG,stdout
    
    ===================================
   
这个文件可以划为三小块
===========第一块定义了一个名为 stdout 的appender和layout (appender,layout的概念后面再解释,目前先记着有这样两个名词):
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    
    定义stdout的实际输出实现类,从这个appender实现类名可以猜到,这个类是负责控制台输出的。
    
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    
    定义stdout的输出装饰器
    
    log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH\:mm\:ss.SSS} %-5p [%F\:%L]%x %m%n
    
    装饰器参数配置
   
    
    ============第二块定义了一个名为 fileout 的appender和layout:
    
    log4j.appender.fileout=org.apache.log4j.RollingFileAppender
    
    同理可猜这个实现类是输出到文件的
    
    log4j.appender.fileout.File=D:/workspace/log4jtest/log/application.log
    
    log4j.appender.fileout.MaxFileSize=10000KB
    
    log4j.appender.fileout.MaxBackupIndex=10
    
    log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
    
    log4j.appender.fileout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS}[%24F:%-3L:%-5p]%x %m%n
   
    ============第三块定义了名字分别为rootCategory,log4j.logger.com.wolfsquare.log2的两个logger
    
    log4j.rootCategory=INFO, stdout, fileout
    
    log4j.logger.com.wolfsquare.log2=DEBUG,stdout
   
    rootCategory logger是缺省的logger,记录所有的包的信息输出。
    
    第二个logger是只输出指定包com.wolfsquare.log2下的日志信息。
    
    那么INFO,DEBUG又是什么意思呢,他们是信息的分级标识,通过继承实现这个实现自定义级别的分级。
    
    第三块配置两句的意思是这样的:
    
    rootCategory 把所有类的INFO级别以上的信息输出到stdout和fileout两个appender中,
    
    logger.com.wolfsquare.log2,把com.wolfsquare.log2包中的所有类(包括子包)DEBUG级别(含)以上的信息输出到stdout 中
    
    一个logger可以输出到很多个设备中(appender),如果需要增加输出设备则用分号分隔开appender名称即可。
   
    输出信息的分类级别是DEBUG > INFO > WARN > ERROR,信息细节由细到粗,指定输出某一级别的信息时,
    
    过细的信息输出将会被忽略
   
    如果一个配置中有多个logger,他们之间会有什么关系呢?答案是,在输出上,他们没有任何关系,都是独立运作的,
    
    不相关的,但是在配置上,父包的配置会传给子包,如果子包没有另外定义配置的话。
    
    例如上面配置文件中的两个logger:
    
    log4j.logger.com.wolfsquare
    
    log4j.logger.com.wolfsquare.log2
   
    这里认为 log4j.logger.com.wolfsquare.log2 继承自 log4j.logger.com.wolfsquare,他们的配置声明如下:
    
    log4j.rootCategory=INFO, stdout, fileout
    
    log4j.logger.com.wolfsquare.log2=,stdout
    
    注意第二句没有指定输出级别,那么根据配置继承规则会继承父logger的配置,在这里就是INFO。
   
    同时需要强调的是,如果两个logger有继承关系,且输出到同一个appender,根据输出独立原则,那么将会出现两行一样的信息,
    
    例如上面的两个logger定义会导致这样的情况。
    
    最后以一幅图来概括:
    
     
   
 
