我想请教一下大家:
    我使用log4j,JBuilder 2005 我把log4j.properties(此文件已经写好了)放在工程的src目录下,可以运行,输出error信息。
    但是我现在把工程文件打jar包了,我还想使用log4j.properties文件,我该怎么办?
    无论我把log4j.properties文件打到jar包中,还是把此文件放在与jar包的相同目录下,都不起作用。程序打成jar包后,如何使用log4j.properties文件进行error等信息的输出?谢谢大家!

解决方案 »

  1.   

    JBuilder2005不知道  2008和Eclipse都可以打包进去  也可以使用
      

  2.   

    读取 jar 里面的文件内容最近怎么那么多人问这个问题啊!
      

  3.   

    谢谢大家的回复!
    我可能没有说清楚:
    我的意思是我把log4j.properties文件放在了工程AA的src文件夹下,可以起作用。但是现在我把工程AA的class文件打成AA.jar了,我不知道log4j.properties文件,以前放在src目录下,而现在应该放在哪,能让log4j.properties文件关联上AA.jar?
    多谢大家回复!
      

  4.   

    很简单啊,你直接放在class目录下,一起打包就可以了。
      

  5.   

    我看别人的一个程序,他把log4j.xml与AA.jar并排放在了同一级目录下,能起作用。
    但我的是log4j.properties,没起作用。难道是不是还有别的说法?多谢大家!
      

  6.   

    多谢#5楼
    回复#5楼:
    我把log4j.properties放在了class目录下,打到了jar包中,但是没有起到效果:当我操作异常时,并没有日志文件被新建。
      

  7.   

    把log4j.properties自己放到classpath里就可以
      

  8.   

    多谢#9楼回复:我把它放进去了,可还是没好使啊?
    我把log4j.properties放在Class-Path中,并把log4j.properties放在了与AA.jar同级目录中。
    谢谢大家!MANIFEST.mf 文件内容:Manifest-Version: 1.0
    Class-Path: lib/hapi-0.5beta.jar lib/jdom.jar lib/commons-logging.jar 
     lib/xerces.jar log4j.properties
    Main-Class: edu.imust.hl7.app.HL7Applicationlog4j.properties文件内容:log4j.rootLogger=WARN, Console,FILElog4j.appender.Console=org.apache.log4j.ConsoleAppender
    log4j.appender.Console.layout=org.apache.log4j.PatternLayout
    log4j.appender.Console.layout.ConversionPattern=(%r ms) [%t] %-5p: %c#%M %x: %m%nlog4j.appender.FILE=org.apache.log4j.FileAppender
    log4j.appender.FILE.File=file.html
    log4j.appender.FILE.Append=true
    log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout
      

  9.   

    简言之放的地方只要包含在CLASSPATH环境变量中就可以了
      

  10.   

    跟你的 jar 文件放在一起就可以了啊
      

  11.   

    多谢楼上回复,还想请教一下:
    我把log4j.properties 放在classes目录下,一起打到了jar包中,在控制台用java -jar AA.jar 能够输出log.error中的信息,应该是起作用了,但是没有新建file.html文件(因为 log4j.appender.FILE.File=file.html )无论我通过控制台,或者双击jar包执行,都没有新文件产生,这是为啥啊?
    谢谢大家!
      

  12.   

    回复火龙果:
    确实,放在一个目录之下,可以,不用在MANIFEST.mf中class-path指定,也不用放在classes中一起打包,在控制台执行java -jar AA.jar 在控制台输出了log.error中的内容。但为什么没有新建file.html文件呢?在控制台输出:2009-8-31 19:42:43 ca.uhn.log.HapiLogImpl error
    严重: Error accepting remote connection在控制台输出了,但为什么没有输出在文件中?在没打包之前,直接运行project.jpx是可以产生file.html文件来记录信息的,而打包后只在控制台中有信息?谢谢大家热心帮助!
      

  13.   

    请告之你的目录结构,以及 jar 包中 MANIFEST.MF 的内容。
      

  14.   

    我测试了一下,一点问题都没有:我的目录结构是:root
      |
      +-- test.jar
      |
      +-- lib
      |    |
      |    +-- log4j.jar
      |
      +-- log4j.xmltest.jar 中 META-INF/MANIFEST.MF 内容为:Manifest-Version: 1.0
    Main-Class: com.bao.test.Main
    Class-Path: . lib/log4j.jarlog4j.xml 内容为:<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n" />
        </layout>
      </appender>
      
      <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="logs/file.log" />   
        <param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />   
        <layout class="org.apache.log4j.PatternLayout">   
          <param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n" />   
        </layout>
      </appender>
      
      <root>
        <priority value="debug" />
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
      </root>
    </log4j:configuration>我在 root 目录下执行 java -jar test.jar 命令后,log4j 会自动在 root 目录下新建一个 logs 的目录,然后把 file.log 放在这个目录中。
      

  15.   

    看了一下,你把 MANIFEST.MF 文件中的 Class-Path: 后加个点(表示当前路径),点后面再加个空格再试试看。
      

  16.   

    给你一个本人亲身经历的实例吧!目录结构如下。project/
           /com/
               /*.class
           /image/
                 /*.jpg
           /META-INF/
                    /MANIFEST.MF
           /org/
               /apache/
                      /log4j/
                            /*.class
           /log4j.properties
    PS:我写的是一个小可执行jar文件.里面带有记录日志的功能,用的是LOG4J.起初想把logj4.jar一起打包的,结果运行不了,报找不到主类,其实并不是找不到入口类,而是找不到log4j。于是就采取了将log4j的代码一起打包,log4j.properties就放在主目录下,可以找得到。
     
      

  17.   

    不建议把 log4j.properties 或者 log4j.xml 诸如配置性质的文件打到 jar 包中去,这样的话根本没办法更改配置文件,跟写死在代码没有什么区别。我一般在建工程时源代码是放在 src 这个 source folder 中的,而需要在类路径下的配置文件,再建一个 resource 的 source folder,把文件放在这个目录中,这样便于打包时不把 resource 打到 jar 中去,而且还能方便复制什么的。
      

  18.   

    火龙果分析得有道理,配置文件是配置的,不是固定的,所以要放在jar包外面
      

  19.   

    感谢火龙果!原因就是差“.”和"lib/log4j.log4j-1.2.8.jar "我的MANIFEST.mf中 classpath 没有写“.” 也没有写 "lib/log4j.log4j-1.2.8.jar "(我以为程序中用了lib/commons-logging.jar 而没有用log4j-1.2.8.jar,所以没写,新手了一回...)我想没有在MANIFEST.mf中写“.”,导致没有file.html文件产生,而控制台能输出log信息,是因为在环境变量中的classpath 中有“.”,而MANIFEST.mf没有“.”,应该是这个原因吧。再次感谢火龙果!
    谢谢大家热心帮助!