指定log4j的配置文件(log4j2.xml)作为VM参数,仅在eclipse中工作

时间:2018-11-04 20:56:43

标签: java logging configuration log4j2

我正在使用新的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时为什么没有更多调试消息。

感谢您的支持。

1 个答案:

答案 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中时,它们就会引起麻烦。