0

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

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

我很肯定包含 log4j2.xml 的目录没有在 CLASSPATH 中找到,正如我的构建文件的“jar”目标中的清单中设置的那样。

这是其中包含清单的 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 文件可见?

谢谢你的帮助

4

1 回答 1

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

于 2013-04-06T14:50:28.403 回答