Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。如题,想把不同级别的日志信息输出到不同的文件:
eg:     
         debug_log.log
         info_log.log
         warn_log.log
         error_log.log
         fatal_log.log
网上看了有人说这样可以解决:
      log4j.rootLogger=INFO,stdout,rolling
log4j.logger.com.woogo=INFO,A1
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %r [%t] %5p [%F:%L] - %m%nlog4j.appender.rolling.layout=org.apache.log4j.PatternLayout
log4j.appender.rolling.layout.ConversionPattern=%d %r [%t] %5p [%F:%L] - %m%n
log4j.appender.rolling=org.apache.log4j.RollingFileAppender
log4j.appender.rolling.File=c:\woogo.log
#log4j.appender.rolling.File=/usr/local/jakarta-tomcat-5.0.25/logs/woogo.log
log4j.appender.rolling.MaxFileSize=5120KB
log4j.appender.rolling.MaxBackupIndex=10log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.File=c:\mylog1.log
log4j.appender.A1.MaxFileSize=500KB
log4j.appender.A1.MaxBackupIndex=50
log4j.appender.A1.Append=true
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} - [%p] [%C{1}] - %m%n
试了试,不太理解。特别是实际应用时要怎么用。
有人对log4j.logger.com.woogo的用法给出过这样的解释:
可以指定特定包的输出级别,仅限于此包:
使用属性:log4j.logger.包名 = 级别
试了试,确实可以达以不同包有特定的输出级别,(可这样是把不同包记下来的日志输出到不同文件了呀)
注:以上测试时都是以实例进行命名的(LogFactory.getLog()方法的参数使用的是当前类的class,这是目前被普通认为的最好的方式。)
从上面两种用法上产生了一些困惑:
 1.      log4j.logger.com.woogo  倒底应该怎么理解。
 2.     相对第一种方法,对第二种方法更理解一些。
          可这样做,为不同包指定了不同级别,也指定了输出到的文件。
         (只是把不同包日志输出到不同文件记录了呀。并没有起到想要的效果呀。)
          (想要不得效果是:不是按包分,是按级别分。)
         
 3.     测试时这样写的LogFactory.getLog("A1")。
         在其实包内按上面的写法也可以享受上面com.woogo  这个包所定义的日志级别.
        我这样理解的:因为调用了LogFactory.getLog("A1"),所以不管是在哪个包都会按这种A1定义的级别输出日志。
                       可感觉实际应用时一定不是这样写的,,, 4.    抛开上面的问题。给我个解决办法也成。(实现不同级别日志输出到不同文件)
小弟以前没怎么写过日志,,不知道在实际应用中倒底是怎么样的。。可以问的也有些迷惑。。请大家见量。

解决方案 »

  1.   

    log4j可以支持这个设置,但是不可以使用.properties文件进行配置,必须使用XML配置才可以。用org.apache.log4j.xml.DOMConfigurator读取配置文件<?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"/>
    </appender>
    <appender name="DEBUG" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="debug.log"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="500KB"/>
    <param name="MaxBackupIndex" value="2"/>
    <layout class="org.apache.log4j.PatternLayout"/>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
    <param name="LevelMax" value="DEBUG" />
    <param name="LevelMin" value="DEBUG" />
    </filter>
    </appender>
    <appender name="INFO" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="info.log"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="500KB"/>
    <param name="MaxBackupIndex" value="2"/>
    <layout class="org.apache.log4j.PatternLayout"/>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
    <param name="LevelMax" value="INFO" />
    <param name="LevelMin" value="INFO" />
    </filter>
    </appender>
    <root>
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="DEBUG"/>
    <appender-ref ref="INFO"/>
    </root>
    </log4j:configuration>
      

  2.   

    先谢过了是你上面代码写一个log4j.xml文件log4j.properties  是tomcat会自动加载吧,,如果写成  log4j.xml  何时加载呀,,在web.xml里用不用配置一下呀,,
      

  3.   

    就是写一个log4j.xml,然后在你应用启动时调用DOMConfigurator.config来配置log4j
      

  4.   

    然后在你应用启动时调用DOMConfigurator.config来配置log4j
    这里做是的什么工作呀,,,,能说的详细一些吗,,,,
      

  5.   

    不是说使用标准的名称作为配置文件的名称可以使LOG4J可以自动搜索到该文件并加载它吗。。像上面说的,,,现在不管我是log4j.properties  还是 log4j.xml   都应该是标准的名称呀,,,有了log4j.properties 或log4j.xml  以后,还有做什么呀,,??
    然后在你应用启动时调用DOMConfigurator.config来配置log4j 指的是什么,,,能说详细一些吗,,,,网上看到有这样写的,,
    在web.xml里加入
    <servlet>  
      <servlet-name>log4jServlet</servlet-name>  
      <servlet-class>Log4JServlet</servlet-class>  
      <init-param>  
        <param-name>profile</param-name>  
        <param-value>/WEB-INF/log4j.properties</param-value>  
      </init-param>  
      <load-on-startup>1</load-on-startup>  
    </servlet> 
    用标准名的话不用写这个吧,,,,
      

  6.   

    就是写一个类实现ServletContextListener接口,并在web.xml中增加<listener>myClass</listener>在public void contextInitialized(ServletContextEvent event)方法中自己写代码调用DOMConfigurator.config方法
      

  7.   

    还是不行呀,,,1。servlet
    public void contextInitialized(ServletContextEvent arg0) {
    Log log  =  LogFactory.getLog(Mylog4jServlet. class ); 
    DOMConfigurator.configure("log4j.xml");
    log.info("Mylog4jServlet");
    }
    2。web.xml
     <listener>
       <listener-class>servlet.Mylog4jServlet</listener-class>
      </listener>这两个文件照着你说的写的. log4j.xml 放在了WEB-INF下面,可是总报错呀,,,
    log4j:ERROR Could not parse file [log4j.xml].
    java.io.FileNotFoundException: C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin\log4j.xml (系统找不到指定的文件。)

    若把log4j.xml 放在 src 下面(也就是web-inf/class),,,倒可以正常写日志。
    (这可能就是自动加载了吧)可是日志输出的位置并不是我想要的,,,
    C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin
      

  8.   

    那你就在<param name="File" value="debug.log"/>这里改一下啊,你想写哪里就写哪里啊DOMConfigurator.configure("log4j.xml"); 这个意思是加载当前目录中的log4j.xml,也就是C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin\log4j.xml 文件
      

  9.   

    web.xml
      <context-param>
       <description>web root</description>
       <param-name>webAppRootKey</param-name>
       <param-value>SpringTest002.root</param-value>
      </context-param>log4j.xml<param name="File" value="${SpringTest002.root}/WEB-INF/calsses/logs/debug.log"/>>我这样写为什么还是报错呀,,,
    能不能说的详细点呀,,,就差这么一点了,,,,解决了算了,,,
      

  10.   

    楼主:启动时报错是不是:
    java.io.FileNotFoundException: d: atal.log (文件名、目录名或卷标语法不正确。)您的问题解决了没,如果已解决能不能给出给出方案,我的报的是这个错啦,找不到解决方案.谢谢