我正在使用新的Log4j2-Java Logging Framework。如果我在eclipse中将配置文件的路径指定为VM参数-Dlog4j.configurationFile=/home/../config.xml
,则一切正常。配置文件已加载,日志记录按预期工作,即所有日志均写入文件中。如果我另外使用-Dlog4j.debug
,则会从框架中获得相应的调试消息,该消息将确认正确加载了配置文件。
但是,当我将ANT与build.xml文件一起使用时,日志记录框架似乎已使用默认配置进行了初始化-日志不再写入文件,而是写入控制台。我从控制台使用以下语句启动创建的prog.jar文件:
java -Dlog4j.configurationFile=/home/../config.xml -Dlog4j.debug -jar prog.jar
我从Log4j2框架获得的唯一调试消息如下:
DEBUG StatusLogger org.slf4j.helpers.Log4jLoggerFactory不在类路径上。好!
以下是我用来创建prog.jar的build.xml文件的一部分:
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
</target>
<path id="master-classpath">
<fileset dir="${lib}/apache-log4j-2.11.1-bin/">
<include name="log4j-api-2.11.1.jar"/>
<include name="log4j-core-2.11.1.jar"/>
</fileset>
</path>
<target name="compile" depends="init" description="compile the source">
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}" includeantruntime="true">
<classpath refid="master-classpath"/>
</javac>
</target>
<target name="jar" depends="compile" description="generate the distribution">
<mkdir dir="${dist}"/>
<jar jarfile="${dist}/prog.jar" basedir="${build}" compress="true">
<fileset dir="${src}" includes="**/*.java"/>
<zipgroupfileset dir="${lib}/apache-log4j-2.11.1-bin/" includes="*.jar" />
<manifest>
<attribute name="Main-Class" value="ch.zwas.aks.Runner"/>
</manifest>
</jar>
</target>
我很困惑为什么它可以在Eclipse上运行,但是当我使用ANT创建项目并在控制台中指定配置文件时,显然不起作用。此外,我不知道为什么从控制台运行jar时为什么没有更多调试消息。
感谢您的支持。
答案 0 :(得分:0)
由于Vikas Sachdeva的提示,我得以解决此问题。问题是我显然将log4j库中的太多jar文件打包到prog.jar
中。当我仅包含以下jar文件时,它也可以在ANT /控制台中正常使用。
junit-X.jar
log4j-api-X.ja
log4j-core-X.jar
slf4j-api-X.jar
slf4j-simple-X.jar
我遗漏了log4j库附带的其他jar。 Eclipse似乎忽略了这些,但是当将build.xml包含到最终jar中时,它们就会引起麻烦。