java – 使用可执行JAR时指定Log4j2配置文件

栏目: Java · 发布时间: 5年前

内容简介:翻译自:https://stackoverflow.com/questions/28574905/specifying-log4j2-configuration-file-when-using-executable-jar

使用可执行JAR文件时,我无法指定Log4j2配置文件位置.如果我将所有JAR分开,它可以正常工作,但是当我尝试将它们组合成一个可执行的JAR文件时,由于某种原因,没有从命令行中获取log4j2.xml文件.

我已经尝试了这两种指定位置的方法:

java -Djava.libary.path=..\bin -cp ..\config -jar MyApplication.jar

java -Djava.libary.path=..\bin -Dlog4j.configurationFile=..\config\log4j2.xml -jar MyApplication.jar

这些都没有奏效.我还尝试将包含配置文件的目录添加到JAR清单文件中的类路径中:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.9.2
Created-By: 1.7.0_21-b11 (Oracle Corporation)
Main-Class: com.abc.MyApplication
Class-Path: ../config/

我也没有成功使用这种方法.我有什么想法可能做错了吗?

在此先感谢您的帮助!

编辑

啊,我相信我误解了这个问题.最初,这是我在命令行输出中看到的错误:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

但是在我改变事物的某个时刻,错误消息发生了变化而我没有意识到这一点:

ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...

所以我想到的是,即使我正在构建的可执行JAR包含其中的log4j-core-2.1.jar和log4j-api-2.1.jar JAR以及MANIFEST文件的类路径,也存在问题.我编写我的ant文件以将库组合到我正在创建的单个JAR中的方式是成功复制目录和类文件,但由于某种原因没有复制其他类型,这显然也是必要的(例如Log4j-config .xsd,Log4j-events.dtd等).

为了解决这个问题,我改变了我在Ant构建文件中合并JAR的方式:

<jar destfile="${dist}/${jarName}" basedir="${classes}" 
    excludes=".svn">

    <!-- Merge this JAR with all the JARs in the lib directory, so that
    we are only creating one distribution JAR that includes all the
    libraries that you need. -->
    <fileset dir="${classes}" includes="**/*.class" />
    <zipgroupfileset dir="${lib}" includes="**/*.jar" />

    <!-- Specify the manifest file of the JAR -->
    <manifest>
        <attribute name="Main-Class" value="com.abc.MyApplication"/>
        <attribute name="Class-Path" value=". ${manifest.classpath}"/>
    </manifest>
</jar>

这解决了问题并将所有文件从JAR复制到我新创建的JAR中.

解决此问题后,我上面发布的第二个命令用于指定配置文件的位置. (如下面的@rewolf所述,第一个命令不起作用,因为JAR的MANIFEST中指定的类路径会覆盖命令行上指定的任何类路径.

感谢您的回复,他们肯定帮助我找到了解决错误的正确道路.

Java文档中没有很好解释的东西是,如果你使用的是可执行的Jar,它只会使用Manifest文件中指定的Class-Path.它不会侦听-cp或–classpath参数.

-Dlog4j.configurationFile =目录/ file.xml

绝对应该工作.考虑到你的斜线方向,我假设你在Windows上运行.您确定从正确的相对目录运行它吗?

更新

我刚刚在Windows中尝试过没有问题.我使用了以下清单:

Manifest-Version: 1.0
Built-By: andrew.flower
Build-Jdk: 1.7.0_67
Class-Path: lib/log4j-api-2.1.jar lib/log4j-core-2.1.jar
Created-By: Apache Maven 3.2.3
Main-Class: com.andrew_flower.test.Log4jTest
Archiver-Version: Plexus Archiver

Log4j2 jar位于lib /目录中,log4j2.xml位于conf /目录中.我执行了以下命令,它成功找到了配置.

java -Dlog4j.configurationFile=conf\log4j2.xml -jar log4j2test1-1.0-SNAPSHOT.jar

翻译自:https://stackoverflow.com/questions/28574905/specifying-log4j2-configuration-file-when-using-executable-jar


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

基于内容图像检索技术

基于内容图像检索技术

周明全 / 清华大学 / 2007-12 / 28.00元

《基于内容图像检索技术》从理论方法研究与实现技术角度,总结归纳了基于内容图像检索(CBIR)技术的研究与进展,并融入了作者多年来的相关研究与应用成果,系统地介绍了CBIR的主要概念、基本原理、典型方法、实用范例以及新动向。《基于内容图像检索技术》共有12章分为五部分:第一部分是概述,分析了CBIR的体系结构、技术现状和发展趋势;第一部分讨论图像特征提取,给出图像低层特征(颜色、形状、纹理、空间关系......一起来看看 《基于内容图像检索技术》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具