最近刚好在学校Log4j的相关知识,通过查找相关的资料,终于对它有了一个初步的认识和理解。但是学习中发现一个问题,一直没有找到相关的答案,希望各位大哥大姐们,帮忙解决一下!问题如下:通过log4j.properties配置时,需要包括三个内容,(1)配置Logger(2)配置日志信息输出的目的地Appender(3)配置日志信息的格式(布局)。在配置(2)时,发现其语法如下 
  log4j.appender.appenderName = Log4j提供的appender类(前面的log4j的l是小写)
  log4j.appender.appenderName.属性名 = 属性值
  …..
  log4j.appender.appenderName.属性名 = 属性值
我的问题就是“属性名”从哪儿来的,我开始以为是来自Log4j提供的appender类,例如我配置为:
log4j.appender.stdout = org.apache.log4j.FileAppender
log4j.appender.stdout.File=E\:mylog.txt
那么属性 File就是类FileAppender的实例域吗?我查找了FileAppender源码,在类中没有发现有File变量。那么File从哪来的?谢谢。

解决方案 »

  1.   

    FileAppender是Appender的具体子类,继承了Appender的属性,你找找抽象父类Appender的属性,估计在Appender里面就有了
      

  2.   

    在log4j.rootLogger定义的,如:
    log4j.rootLogger=warn,stdout,file

    log4j.appender.stdout.file=E\:mylog.txt
      

  3.   

    不好意思,写错了,应该是:
    log4j.appender.file.File=E\:mylog.txt
      

  4.   

    谢谢1楼的回答,但是我查过了,Appender里也没有
      

  5.   

    谢谢2楼的回答,可是我没有在log4j.rootLogger=warn,stdout,file定义file
    我的配置如下:log4j.rootLogger =debug,stdout
                log4j.appender.stdout = org.apache.log4j.FileAppender
                log4j.appender.stdout.File=E\:mylog.txt
    这样配置是正确的(我已经测试过了),我是想问log4j.appender.stdout.File中的File从哪儿来的?
                  
      

  6.   

    log4j.appender.file.File=E\:mylog.txt
     
      

  7.   

    不好意思,写错了,应该是:
    log4j.appender.file.File=E\:mylog.txt
     
      

  8.   

    谢谢7楼,我就是想知道配置log4j.appender.file.File=E\:mylog.txt中的“File”属性从什么地方来的?
      

  9.   

    建议使用 log4j.xml 以 XML 格式配置,结构清晰明了。建议你用 log4j.xml 再加个 DTD 的话,在编写时还能有自动提示的。相对于 .properties 的话 XML 有更好的层次性,非常明确。<?xml version="1.0" encoding="GBK" ?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
      threshold="debug">  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%t] [%c{1}] %m%n" />
        </layout>
      </appender>
      
      <appender name="ASYNC_CONSOLE" class="org.apache.log4j.AsyncAppender">
        <param name="BufferSize" value="8192"/>
        <appender-ref ref="CONSOLE" />
      </appender>  <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="/home/x/log/server.log" />
        <param name="Append" value="true" />
        <param name="DatePattern" value="'.'yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%t] [%c{1}] %m%n" />
        </layout>
      </appender>  <root>
        <level value="INFO" />
        <appender-ref ref="CONSOLE" />
      </root>
    </log4j:configuration>log4j.dtd 在 log4j.jar 包中可以找到,拿出来跟 log4j.xml 放在一起,那么在 eclipse 编辑时就会有自动提示的。