内容简介:翻译自: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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Go基础系列:指定goroutine的执行顺序
- Spring中Bean创建完成后执行指定代码的几种实现方式
- WPF 类型的构造函数执行符合指定的绑定约束的调用时引发了异常
- c# – “SMTP主机未指定” – 但是是否指定?
- 运维安全 | 如何限制指定账户不能SSH只能SFTP在指定目录
- Zabbix监控指定端口
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Master Switch
Tim Wu / Knopf / 2010-11-2 / USD 27.95
In this age of an open Internet, it is easy to forget that every American information industry, beginning with the telephone, has eventually been taken captive by some ruthless monopoly or cartel. Wit......一起来看看 《The Master Switch》 这本书的介绍吧!