jar文件中的清单/类路径未成功在CLASSPATH上为log4j2.xml设置目录

时间:2013-03-30 01:04:27

标签: java ant log4j manifest log4j2

我已经成功编写了一个小型Java程序,可以在从NetBeans运行时查找并使用我的log4j2.xml文件。我现在正在尝试创建一个包含其他jar的jar文件,因此我可以在命令行上运行它。我用Ant构建了jar文件,并在jar目标中使用了“Manifest”。

构建之后,我执行'java -jar BimbleParser.jar',找到我放在Manifest'Class-Path'中的所有jar文件,程序运行正常。除了它没有按log4j2.xml文件(到.log文件)进行记录。当我设置强制错误时,我得到一些'ERROR'记录到命令行,我相信log4j2的默认行为,表明它没有找到log4j2.xml文件。

我非常肯定在我的构建文件的'jar'目标中的清单中设置的CLASSPATH中找不到包含log4j2.xml的目录。

这是包含清单的ant任务:

   <target name="jar" description="Create jar file" depends="junit">
    <jar destfile="${project.name}.jar" duplicate="add" basedir="${classes_dir}"       filesetmanifest="skip" >
        <manifest>
            <attribute name="Build-Date" value="${TODAY} ${TSTAMP}"/>
            <attribute name="Main-Class" value="com.mumble.parsers.Bumble.BumbleParser"/>
            <attribute name="Class-Path" value="./CCom/config ./CCom/lib/CComCommons.jar ./CCom/lib/commons-configuration.jar ./CCom/lib/commons-lang.jar ./CCom/lib/log4j-api.jar ./CCom/lib/log4j-core.jar ./CCom/lib/commons-logging.jar ./CCom/lib/commons.lang3.jar"/>
        </manifest>
    </jar>
</target>

log4j2.xml位于第一个类路径条目中,为“./CCom/config”,我的程序找到并使用了所有其他jar文件。我做错了什么?

也许有另外的解决方案可以通过这个'java -jar BimbleParser.jar'场景中的类路径使log4j2.xml文件可见?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我认为自动配置仍然存在漏洞。作为一种解决方法尝试使用它(在更正log2j.xml文件的路径之后):

URI configuration = MyClass.class.getResource("/<path>/log4j2.xml").toURI();
Configurator.initialize("config", null, configuration);

基于示例:https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/FormatterLoggerManualExample.java