我已经成功编写了一个小型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文件可见?
感谢您的帮助
答案 0 :(得分:0)
我认为自动配置仍然存在漏洞。作为一种解决方法尝试使用它(在更正log2j.xml文件的路径之后):
URI configuration = MyClass.class.getResource("/<path>/log4j2.xml").toURI();
Configurator.initialize("config", null, configuration);