再次提醒,这不是一个web项目,既没有tomcat,也没有apache!所以拜托大家不要胡乱说!
      
     以下是工程信息:     IDE:Jbuilder2006,一个src文件夹,一个classes文件夹。
     工程:Swing桌面项目,没有任何web应用,也没有任何网络功能,只是单纯的桌面看图软件工程!
     JDK:1.6.0_20
     错误信息:每次启动工程的时候,总是报log4j:WARN No appenders could be found for logger 
               或者log4j:WARN Please initialize the log4j system properly.      我在网上查了,说这是因为log4j没有配置好的缘故,可是网上的信息都是基于web应用的,在本项目中起不到
      任何参考作用。      如果我想在这个工程下正常使用log4j,该如何配置?还有,我想将日志文件输出到指定位置,比如D:\Tools\log\info.log,按照以下内容书写的log4j.properties可以做到吗?      log4j.rootLogger=INFO, A1      log4j.appender.ROOT.File=D:\\Tools\\log\\info.log      log4j.appender.A1=org.apache.log4j.ConsoleAppender      log4j.appender.A1.layout=org.apache.log4j.PatternLayout      log4j.appender.A1.layout.ConversionPattern=%-5p(%t) %-30c %x - %m%n
      

解决方案 »

  1.   

    楼主用这个方法:Class#getResourceAsStream加载log4j.properties

    Properties props = new Properties()
    props.load(configStream)
    PropertyConfigurator.configure(props)具体看log4j的api
      

  2.   

    log4j.properties放在src目录下,和classes目录下面
      

  3.   

    log4j.appender.A1=org.apache.log4j.FileAppender
      

  4.   

    log4j.properties放在src目录下,和classes目录下面
      

  5.   

    放在src目录下 然后用DOMConfigurator.configureAndWatch("log4j.xml");就可以解决
      

  6.   

    # Sample ResourceBundle properties file
    log4j.rootCategory=INFO,dailyFile
    log4j.appender.dailyFile.File=xxxxx.log
    log4j.appender.dailyFile.layout.ConversionPattern=%d{M/d/yyyy HH:mm} %c %p - %m%n
    log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd
    log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
      

  7.   


    不用手动加载,log4j.xml 会被自动加载。log4j 最先加载 log4j.xml 再次是 log4j.properties
      

  8.   

    把LOG4J的配置文件放在SRC目录下,不需要我们编码读取配置文件,log4j会自动读取配置文件的。
    不过,你这个并非WEB工程的话,你可以把 Logger写成静态的变量,
    楼主你想要实现日志输入 文件,要改一下你的配置
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    这一句要改成
    log4j.appender.A1=org.apache.log4j.FileAppender
    才可以日志写文件
    log4j.appender.A1=org.apache.log4j.ConsoleAppender
    中的ConsoleAppender 是控制台输出的,就是将日志在控制台打印出来 ,不会写文件
    其他的配置没看出什么问题你可以这样先测试一下    Logger logger = Logger.getLogger(Object.class);
        logger.info(new Exception("test log4j"));
      

  9.   

    log4j的JAR包,推荐使用1.2.X以上版本,工程中正确引入JAR包,再做以上步骤的话,应该不会出问题的。。
    还有就是 log4j.appender.ROOT.File=D:\\Tools\\log\\info.log
    这一句中的,ROOT 我不太确定可不可以,如果不可以的话,换成A1 肯定没问题
      

  10.   


    对不起,我前面还是忘了一句,这个工程所有使用到的jar,都是放在与src、classes同级的目录lib下的,在工程的属性设置中,Required Libraries中的所有library都来自于这个文件夹,并没有用jbuilder进行导入,而且,工程中也没有log4j.xml这个文件。这种情况下,该怎么办?是建立一个log4j.xml,然后把他放在lib目录下吗?
      

  11.   

    以下是正确配置log4j步骤:
    1、在src下创建log4j.xml文件(具体的日志配置文件在该文件中配置)
    2、在src下创建Log.java文件
    3、在需要日志的类先实例上面创建的Log.java类:
    private Log log = new Log(CurrentClassName.class);
    4、在需要日志的类中引用日志:
    log.info("info级别日志添加");
    ============源码:==================
    一、log4j.xml:
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <!-- 控制台System.out -->
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern"
    value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />
    </layout>
    </appender> <!--  把DEBUG信息输出到日志文件 --><!-- <appender name="DEBUG"-->
    <!-- class="org.apache.log4j.DailyRollingFileAppender">-->
    <!-- <param name="File" value="d:/log/debug.log" />-->
    <!-- <param name="Append" value="true" />-->
    <!-- <param name="DatePattern" value="'.'yyyy-MM-dd" />-->
    <!-- <layout class="org.apache.log4j.PatternLayout">-->
    <!-- <param name="ConversionPattern"-->
    <!-- value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />-->
    <!-- </layout>-->
    <!-- <filter class="org.apache.log4j.varia.LevelRangeFilter">-->
    <!-- <param name="LevelMin" value="DEBUG" />-->
    <!-- <param name="LevelMax" value="DEBUG" />-->
    <!-- </filter>-->
    <!-- </appender>--> <!--  把INFO信息输出到日志文件 --> <appender name="INFO"
    class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="d:/log/info.log" />
    <param name="Append" value="true" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern"
    value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
    <param name="LevelMin" value="INFO" />
    <param name="LevelMax" value="INFO" />
    </filter>
    </appender> <!--  把WARN信息输出到日志文件 --><!-- <appender name="WARN"-->
    <!-- class="org.apache.log4j.DailyRollingFileAppender">-->
    <!-- <param name="File" value="d:/log/warn.log" />-->
    <!-- <param name="Append" value="true" />-->
    <!-- <param name="DatePattern" value="'.'yyyy-MM-dd" />-->
    <!-- <layout class="org.apache.log4j.PatternLayout">-->
    <!-- <param name="ConversionPattern"-->
    <!-- value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />-->
    <!-- </layout>-->
    <!-- <filter class="org.apache.log4j.varia.LevelRangeFilter">-->
    <!-- <param name="LevelMin" value="WARN" />-->
    <!-- <param name="LevelMax" value="WARN" />-->
    <!-- </filter>-->
    <!-- </appender>--> <!--  把ERROR信息输出到日志文件 --> <appender name="ERROR"
    class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="d:/log/error.log" />
    <param name="Append" value="true" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern"
    value="%-5p %d{yy-MM-dd HH:mm:ss} %c(%L) %m%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
    <param name="LevelMin" value="ERROR" />
    <param name="LevelMax" value="ERROR" />
    </filter>
    </appender>
    <!--  把INFO信息输出到数据库中 -->
    <!-- appender name="INFOJDBC"
    class="org.apache.log4j.jdbc.JDBCAppender">
    <param name="URL" value="jdbc:mysql://127.0.0.1:3306/jxcpa?useUincode=true&amp;characterEncoding=GBK" />
    <param name="driver" value="com.mysql.jdbc.Driver" />
    <param name="user" value="root" />
    <param name="password" value="" />

    <param name="sql" value="insert into logs (level,creatdate,class,num,message) values (\'%p\',\'%d\',\'%c\',\'%L\',\'%m\')" />

    </appender --> <!--  把WARN信息输出到数据库中 --> <!--
    <appender name="WARNJDBC"
    class="org.apache.log4j.jdbc.JDBCAppender">
    <param name="URL"
    value="jdbc:mysql://127.0.0.1:3306/jxcpa?useUincode=true&amp;characterEncoding=GBK" />
    <param name="driver" value="com.mysql.jdbc.Driver" />
    <param name="user" value="root" />
    <param name="password" value="" />

    <param name="sql"
    value="insert into logs (level,creatdate,class,num,message) values (\'%p\',\'%d\',\'%c\',\'%L\',\'%m\')" />

    </appender>
    -->
    <!--  把ERROR信息输出到数据库中 -->
    <!--
    <appender name="ERRORJDBC"
    class="org.apache.log4j.jdbc.JDBCAppender">
    <param name="URL"
    value="jdbc:mysql://127.0.0.1:3306/jxcpa?useUincode=true&amp;characterEncoding=GBK" />
    <param name="driver" value="com.mysql.jdbc.Driver" />
    <param name="user" value="root" />
    <param name="password" value="" />

    <param name="sql"
    value="insert into logs (level,creatdate,class,num,message) values (\'%p\',\'%d\',\'%c\',\'%L\',\'%m\')" />

    </appender>
    -->
    <root>
    <priority value="info" />
    <appender-ref ref="STDOUT" />
    <!--
    <appender-ref ref="DEBUGConsole" />
    <appender-ref ref="INFOConsole" />
    <appender-ref ref="WARNConsole" />
    <appender-ref ref="ERRORConsole" />-->
    <!-- <appender-ref ref="DEBUG" />-->
    <appender-ref ref="INFO" />
    <!-- <appender-ref ref="WARN" />-->
    <appender-ref ref="ERROR" />
    <!--appender-ref ref="INFOJDBC" /-->
    <!--<appender-ref ref="WARNJDBC" /> -->
    <!-- <appender-ref ref="ERRORJDBC" />-->
    </root></log4j:configuration>
    二、Log.java
    import org.apache.log4j.Logger;public class Log {
    private Logger log;

    public Log(Class c){
    log = Logger.getLogger(c);
    }

    public void debug(String message) {
    log.debug(message);
    }

    public void info(String message) {
    log.info(message);
    }

    public void error(String message) {
    log.error(message);
    }

    public void warn(String message) {
    log.warn(message);
    }
    }
      

  12.   

    补充:CurrentClassName.class 为当前需要添加日志的类名,根据实际类来写
      

  13.   

    按照你的设置改了以后,出现两个警告和一个错误:log4j:WARN File option not set for appender [A1].
    log4j:WARN Are you using FileAppender instead of ConsoleAppender?
    log4j:ERROR No output stream or file set for the appender named [A1].
      

  14.   


    补充一句,改成FileAppender以后,才会出现刚才所说的错误信息,如果使用ConsoleAppender就没有了。
      

  15.   

    log4j.xml/log4j.properties 文件所在的目录添加到classpath
      

  16.   

    添加了,依旧没有输出,现在报这种错误:
    log4j:WARN File option not set for appender [A1].
    log4j:WARN Are you using FileAppender instead of ConsoleAppender?
    log4j:ERROR No output stream or file set for the appender named [A1].
    你看看我先在的文件设置有问题吗:
    log4j.rootLogger=INFO, A1log4j.appender.A1=D:/Tools/log/info.log# A1 is set to be a ConsoleAppender.
    #log4j.appender.A1=org.apache.log4j.ConsoleAppender
    log4j.appender.A1=org.apache.log4j.FileAppender# A1 uses PatternLayout.
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=%-5p(%t) %-30c %x - %m%n
      

  17.   

    你配置文件有问题呀log4j.appender.A1=D:/Tools/log/info.log
    这一句 错了应该是
    log4j.appender.A1.file=D:/Tools/log/info.log
      

  18.   


    楼主你理解错了,我说的 这里ROOT不行,是把root改成A1,修改后结果应该为
    log4j.appender.A1.File=D:\\Tools\\log\\info.log
    而不是把 ROOT.File 替换成 A1
      

  19.   

    我以前没用过log4j,所以对这些根本不清楚。
      

  20.   

    OK了,终于输出了。感谢LZW190和wgy__muise