appender 是属于 category 的.
所以程序里面使用不用 category 的 Logger 来记录日志就可以了.

解决方案 »

  1.   

    log4j.rootLogger=debug, R, L# R is the RollingFileAppender that outputs to a rolling log 
    # file called sample.log.log4j.appender.R=org.apache.log4j.RollingFileAppender
    log4j.appender.R.File=sample1.log# Define a pattern layout for the file.  
    # For more information on conversion characters (i.e. d,p,t,c,l,m,n)
    # please see the PatternLayout class of the Log4j API.log4j.appender.R.layout=org.apache.log4j.PatternLayout# The following normally appears on one single line.
    log4j.appender.R.layout.ConversionPattern=[slf5s.start]%d{dd MM yyyy HH:mm:ss,S}[slf5s.DATE]%n\
       %p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n\
       %c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n# Set the max size of the file 
    log4j.appender.R.MaxFileSize=500KB
    # R is the RollingFileAppender that outputs to a rolling log 
    # file called sample.log.log4j.appender.L=org.apache.log4j.RollingFileAppender
    log4j.appender.L.File=sample2.log# Define a pattern layout for the file.  
    # For more information on conversion characters (i.e. d,p,t,c,l,m,n)
    # please see the PatternLayout class of the Log4j API.log4j.appender.L.layout=org.apache.log4j.PatternLayout# The following normally appears on one single line.
    log4j.appender.L.layout.ConversionPattern=[slf5s.start]%d{dd MM yyyy HH:mm:ss,S}[slf5s.DATE]%n\
       %p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n\
       %c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n# Set the max size of the file 
    log4j.appender.L.MaxFileSize=500KB
      

  2.   

    在配置文件中按包名或类名来定义Logger
    在程序中按类名取Logger定义:
    log4j.rootLogger=debug,stdout
    log4j.logger.com.mypkg=debug,mypkg
    log4j.logger.com.mypkg.db=info,db
    log4j.logger.com.mypkg.mail=debug,maillog4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5r [%5p][%c{2}] %m%nlog4j.appender.mypkg=org.apache.log4j.RollingFileAppender
    log4j.appender.mypkg.File=system.log
    log4j.appender.mypkg.Append=true
    log4j.appender.mypkg.MaxFileSize=1MB
    log4j.appender.mypkg.MaxBackupIndex=1
    log4j.appender.mypkg.layout=org.apache.log4j.PatternLayout
    log4j.appender.mypkg.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%nlog4j.appender.db=org.apache.log4j.FileAppender
    log4j.appender.db.File=db.log
    log4j.appender.db.Append=true
    log4j.appender.db.layout=org.apache.log4j.PatternLayout
    log4j.appender.db.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%nlog4j.appender.mail=org.apache.log4j.FileAppender
    log4j.appender.mail.File=mail.log
    log4j.appender.mail.Append=true
    log4j.appender.mail.layout=org.apache.log4j.PatternLayout
    log4j.appender.mail.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%nlog4j.additivity.com.mypkg=false
    log4j.additivity.com.mypkg.db=false
    log4j.additivity.com.mypkg.mail=false使用:
    package com.mypkg;
    public class Class1
    {
        private static Logger logger = Logger.getLogger(Class1.class);    ...
        if(logger.isDebugEnabled())
            logger.debug("debug info");
        ...
    }package com.mypkg.db;
    public class Class2
    {
        private static Logger logger = Logger.getLogger(Class2.class);    ...
        if(logger.isDebugEnabled())
            logger.debug("debug info");
        ...
    }package com.mypkg.mail;
    public class Class3
    {
        private static Logger logger = Logger.getLogger(Class3.class);    ...
        if(logger.isDebugEnabled())
            logger.debug("debug info");
        ...
    }这样一来:
      com.mypkg.mail下的类(Class3)的日志就会记入mail.log
      com.mypkg.db下的类(Class2)的日志就会记入db.log
      com.mypkg下的类(Class1)及类似com.mypkg.pkg1这样的未定义相应Logger的包下的类(com.mypkg.pkg1.Class4)的日志就会记入system.log
      com.mypkg以外的类(com.pkg1.Class5)的日志就会记录到rootLogger,即输出到控制台不管增加还是删除日志配置项,都不需要修改程序:
        如果想去掉其中一个,如mail,只需从配置文件中去掉"log4j.logger.com.mypkg.mail=info,mail"这一行,去掉后com.mypkg.mail包下的类(如Class3)的日志就会记入system.log中。    如果要新增Logger,如com.mypkg.pkg2,只需在配置文件中增加类似配置,com.mypkg.pkg2包下的类的日志就会记入新增的log文件,而不再记入system.log文件。还可以为指定类配置一个logger,如为类com.mypkg.db.ConnectionPool配置一个logger:
      log4j.logger.com.mypkg.db.ConnectionPool=debug,pool  log4j.appender.pool=org.apache.log4j.FileAppender
      log4j.appender.pool.File=pool.log
      log4j.appender.pool.Append=true
      log4j.appender.pool.layout=org.apache.log4j.PatternLayout
      log4j.appender.pool.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n  log4j.additivity.com.mypkg.db.ConnectionPool=false这样一来,ConnectionPool类的日志就会记入pool.log,不会记入db.log
      

  3.   

    还可以两个Logger使用同一个appender:
      log4j.logger.com.pkg1=debug,system
      log4j.logger.com.pkg2=info,system
    这样的话com.pkg1和com.pkg2下的日志会分别以degug和info级别输出到system这个appender指定的文件中
      

  4.   

    http://expert.csdn.net/Expert/topic/2456/2456204.xml?temp=.3753321
      

  5.   

    还可以两个Logger使用同一个appender:
      log4j.logger.com.pkg1=debug,system
      log4j.logger.com.pkg2=info,system
    这样的话com.pkg1和com.pkg2下的日志会分别以degug和info级别输出到system这个appender指定的文件中