具体配置在log4j.properties里log4j.logger.com.chouy.Class1=DEBUG,CONSOLElog4j.logger.com.chouy.Class2=INFO,CONSOLE以此类推。log4j.logger. 这个是前缀
然后后面跟上你的包名和类名。

解决方案 »

  1.   

    楼上的,还是没搞明白.以下是我的程序和配置文件,请指正错误.///////////////  ClassLog.java  ////////////////////
    package log4jtest;import org.apache.log4j.Logger;
    import org.apache.log4j.Priority;
    import org.apache.log4j.PropertyConfigurator;public class ClassLog
    {
        static Logger logger = Logger.getLogger(ClassLog2.class.getName());
        
        public ClassLog()
        {
        }
        
        public static void main(String[] args)
        {
            PropertyConfigurator.configure
                       ("C:\\eclipse\\workspace\\mytest\\log4jtest\\log4j.properties");
            logger.debug("Start of the main() in classlog");
            logger.info("Just testing a log message with priority set to INFO");
            logger.warn("Just testing a log message with priority set to WARN");
            logger.error("Just testing a log message with priority set to ERROR");
            logger.fatal("Just testing a log message with priority set to FATAL");
            logger.log(Priority.WARN,"Testing a log message use a alternate form");
            logger.debug(ClassLog2.class.getName());
            ClassLog2 cl2 = new ClassLog2();
            cl2.log();
        }
    }//////////////////  ClassLog2.java  ///////////////////
    package log4jtest;import org.apache.log4j.Logger;
    import org.apache.log4j.Priority;
    import org.apache.log4j.PropertyConfigurator;public class ClassLog2
    {
        static Logger logger = Logger.getLogger(ClassLog2.class.getName());
        
        public ClassLog2()
        {
            
        }
        
        public void log()
        {
            PropertyConfigurator.configure("C:\\eclipse\\workspace\\mytest\\log4jtest\\log4j.properties");
            logger.debug("Start of the main() in classlog2");
            logger.info("Just testing a log message with priority set to INFO");
            logger.warn("Just testing a log message with priority set to WARN");
            logger.error("Just testing a log message with priority set to ERROR");
            logger.fatal("Just testing a log message with priority set to FATAL");
            logger.log(Priority.WARN,"Testing a log message use a alternate form");
            logger.debug(ClassLog2.class.getName());
        }
    }/////////////////  log4j.properties  ////////////////
    log4j.logger=debug,stdout,S,R#2区
    #Print only messages of priority WARN or higher for your category
    log4j.logger.log4jtest.ClassLog=WARN,stdout,R
    #log4j.logger.log4jtest.ClassLog=WARN
    log4j.logger.log4jtest.ClassLog2=DEBUG,S
    #log4j.logger.log4jtest.ClassLog2=DEBUG#3区
    #### First appender writes to console
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    # Pattern to output the caller's file name and line number.
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n#4区
    #### Second appender writes to a file
    log4j.appender.R=org.apache.log4j.RollingFileAppender
    log4j.appender.R.File=c:\\example.log2
    # Control the maximum log file size
    log4j.appender.R.MaxFileSize=100KB
    # Archive log files (one backup file here)
    log4j.appender.R.MaxBackupIndex=1
    log4j.appender.R.layout=org.apache.log4j.PatternLayout
    log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%nlog4j.appender.stdout2=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout2.layout=org.apache.log4j.PatternLayout
    # Pattern to output the caller's file name and line number.
    log4j.appender.stdout2.layout.ConversionPattern=[%t] (%F:%L) - %m%nlog4j.appender.S=org.apache.log4j.RollingFileAppender
    log4j.appender.S.File=c:\\example.log
    # Control the maximum log file size
    log4j.appender.S.MaxFileSize=100KB
    # Archive log files (one backup file here)
    log4j.appender.S.MaxBackupIndex=1
    log4j.appender.S.layout=org.apache.log4j.PatternLayout
    log4j.appender.S.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n
      

  2.   

    希望找到一个XML配置文件的解答.
      

  3.   

    想只把log4j的debug信息输出到debug.log.error信息输出到error.log,info信息输出到info.loglog4j提供了下面一种方式来实现.必须使用xml方式进行配置才能够支持filter过滤元素。配置文件来自:http://www.mail-archive.com/[email protected]/msg09720.html
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
                    <layout class="org.apache.log4j.PatternLayout">
                         <param name="ConversionPattern" value="%c %d{ISO8601}
    -- %p -- %m%n"/>
                    </layout>
            </appender>        <appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">
          <param name="File" value="C:\\logs\\app-debug.log"/>
          <param name="Append" value="true"/>
          <param name="MaxFileSize" value="500KB"/>
          <param name="MaxBackupIndex" value="2"/>
                    <layout class="org.apache.log4j.PatternLayout">
                         <param name="ConversionPattern" value="%c %d{ISO8601}
    -- %p -- %m%n"/>
                    </layout>
                    <filter class="org.apache.log4j.varia.LevelRangeFilter">
                            <param name="LevelMin" value="DEBUG" />
                            <param name="LevelMax" value="DEBUG" />
                    </filter>
            </appender>        <appender name="INFO" class="org.apache.log4j.RollingFileAppender">
          <param name="File" value="C:\\logs\\app-info.log"/>
          <param name="Append" value="true"/>
          <param name="MaxFileSize" value="500KB"/>
          <param name="MaxBackupIndex" value="2"/>
                    <layout class="org.apache.log4j.PatternLayout">
                         <param name="ConversionPattern" value="%c %d{ISO8601}
    -- %p -- %m%n"/>
                    </layout>
                    <filter class="org.apache.log4j.varia.LevelRangeFilter">
                            <param name="LevelMin" value="INFO" />
                            <param name="LevelMax" value="INFO" />
                    </filter>
       </appender>        <appender name="WARN" class="org.apache.log4j.RollingFileAppender">
          <param name="File" value="C:\\logs\\app-warn.log"/>
          <param name="Append" value="true"/>
          <param name="MaxFileSize" value="500KB"/>
          <param name="MaxBackupIndex" value="2"/>
                    <layout class="org.apache.log4j.PatternLayout">
                         <param name="ConversionPattern" value="%c %d{ISO8601}
    -- %p -- %m%n"/>
                    </layout>
                    <filter class="org.apache.log4j.varia.LevelRangeFilter">
                            <param name="LevelMin" value="WARN" />
                            <param name="LevelMax" value="WARN" />
                    </filter>
       </appender>        <appender name="ERROR" class="org.apache.log4j.RollingFileAppender">
          <param name="File" value="C:\\logs\\app-error.log"/>
          <param name="Append" value="true"/>
          <param name="MaxFileSize" value="500KB"/>
          <param name="MaxBackupIndex" value="2"/>
                    <layout class="org.apache.log4j.PatternLayout">
                         <param name="ConversionPattern" value="%c %d{ISO8601}
    -- %p -- %m%n"/>
                    </layout>
                    <filter class="org.apache.log4j.varia.LevelRangeFilter">
                            <param name="LevelMin" value="ERROR" />
                            <param name="LevelMax" value="ERROR" />
                    </filter>
       </appender>        <root>
                    <priority value="debug"/>
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="DEBUG"/>
            <appender-ref ref="INFO"/>
            <appender-ref ref="WARN"/>
            <appender-ref ref="ERROR"/>
            </root></log4j:configuration>
      

  4.   

    谢谢楼上的解答, 不过你的解答不是我的要求
    我的要求是根据类名和包名决定是否输出, 并不是把不同级别的日志输出到不同的文件中.我已经用过滤器把这个问题解决了.
    结贴了.
    把我写的过滤器也贴上来:
    //////////////////////    配置文件:    ////////////////////////
    <filter class="log4jtest.ClassLogFilter">
          <param name="StringToMatch" value="log4jtest.CompareTools"/>
          <param name="AcceptOnMatch" value="false"/>
    </filter>/////////////////////     log4jtest.ClassLogFilter   ///////////////////
    package log4jtest;import org.apache.log4j.spi.Filter;
    import org.apache.log4j.spi.LoggingEvent;
    import org.apache.log4j.varia.StringMatchFilter;public class ClassLogFilter extends StringMatchFilter
    {
        String stringToMatch = null;
        boolean acceptOnMatch = true;    @Override
        public int decide(LoggingEvent event)
        {
            // System.out.println(event.getLoggerName().indexOf(this.getStringToMatch())
            // == -1);
            System.out.println("acceptOnMatch =         " + acceptOnMatch);
            System.out.println("stringToMatch =         " + stringToMatch);
            System.out.println("event.getLoggerName() = " + event.getLoggerName());
            System.out.println(event.getLoggerName().indexOf(this.stringToMatch));
            if (event.getLoggerName().indexOf(this.stringToMatch) == -1)
                return Filter.ACCEPT;
            else
                // if (acceptOnMatch)
                return Filter.DENY;
            // else
            // return Filter.DENY;
        }    public boolean getAcceptOnMatch()
        {
            return acceptOnMatch;
        }    public void setAcceptOnMatch(Boolean acceptOnMatch)
        {
            this.acceptOnMatch = acceptOnMatch;
        }    public String getStringToMatch()
        {
            return stringToMatch;
        }    public void setStringToMatch(String stringToMatch)
        {
            this.stringToMatch = stringToMatch;
        }
    }返回结果是返回ACCEPT显示, 返回DENY就不显示, 返回NATRUAL也显示.
    具体过滤方法可以自己来定义.
    我这里写的不是很详细,有兴趣的朋友可以自己去看看文档.