2010-04-07 65 views
36

我试图运行与罐子外面的文件系统上的文件的log4j.xml像这样一个jar:外部的log4j.xml文件

java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=log4j.xml argToJar1 argToJar2 

我也曾尝试:

java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=/opt/companyName/pathToJar/log4j.xml argToJar1 argToJar2 

log4j.xml文件是文件在同一目录中的jar(/选择/的companyName/pathToJar /),但我仍然得到标准的警告消息:

log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle). 
log4j:WARN Please initialize the log4j system properly. 

是否有可能将配置文件放在jar外面,还是必须将它打包到jar中?

TIA

回答

46

当使用-jar开关启动一个可执行的JAR文件,从JAR文件的清单中获得的类路径。该-cp开关,如果给定的,被忽略。

Jeff Storey's answer将是最简单的解决方案。或者,你可以添加一个Class-Path属性的jar文件的manifest

编辑 尝试启用log4j的调试,使得路径log4j.xml一个完全合格的URL。例如:

java -Dlog4j.debug -Dlog4j.configuration=file:/path/to/log4j.xml -jar ... 
+0

前面我已将此添加到清单,它仍然没有工作(但我不知道相对路径是合法的): 类路径: – javamonkey79 2010-04-07 18:31:36

+0

相对路径有效。你使用的是什么命令? – 2010-04-07 20:40:52

+0

java -Dlog4j.configuration =/path/to/log4j.xml -jar MyJarName.jar 或许是Class-Path:和'。'之间的空格。是责备。 – javamonkey79 2010-04-08 03:23:53

7

你试过java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args>

+0

这没有奏效。 – javamonkey79 2010-04-07 18:30:50

+2

需要的文件:在路径 – 2013-09-09 19:50:37

0

“-jar”仅使用可执行jar内的类路径,而-cp被忽略。添加“。”到可执行jar中的classpath应该允许log4j.xml。

15

这个工程:

java -jar -Dlog4j.configuration="file:d:\log4j.xml" myjar.jar 
1

我不得不使用Sun的JDK和自动配置log4j的问题。使用记录仪之前

String filename = System.getProperty("log4j.configuration"); 
DOMConfigurator(filename); 

您可以使用此。

6

您可以定义默认属性在JAR文件。如果没有自定义属性的定义,你可以使用这个默认的文件。如果定义可以覆盖默认属性自定义属性。

myjar.jar文件包含log4j.default。配置

你可以用这个参数运行程序来启动应用程序

java -jar -Dlog4j.configuration=log4j.properties target\yourfile-v01_000_01_c002.jar 

示例代码

public static void main(String[] args) { 
    String filename = System.getProperty("log4j.configuration"); 
    if(null==filename||filename.trim().equals("")) { 
     logger.info("Using default log4j configuration log4j.default.properties."); 
     logger.info("If you would like to change the default configuration please add following param before startup -Dlog4j.configuration=<log4jfile>"); 
     PropertyConfigurator.configure(Main.class.getResourceAsStream("/log4j.default.properties")); 
    } else { 
     File file = new File(filename); 
     if(!file.exists()) System.out.println("It is not possible to load the given log4j properties file :"+file.getAbsolutePath()); 
     else PropertyConfigurator.configure(file.getAbsolutePath()); 

    } 
} 
+1

谢谢!这适用于.properties文件。如果使用.xml配置文件,则使用DOMConfigurator而不是PropertyConfigurator。 – 2016-07-11 14:11:16

0

java命令 “路径/到/你/ log4jxml:路径/到/ yourjar.jar” your.package.MainClass

在目录中的log4j.xml “路径/到/你/ log4jxml” 会覆盖“path/to/yourjar.jar”中的log4j.xml文件。

请参考Setting multiple jars in java classpath

0

用于`的最简单的路径配置`log4j2 is using the静块setting log4j.configurationFile`:

public class MyClass { 

    static { 
     System.setProperty("log4j.configurationFile", "./config/log4j2.xml"); 
    } 

    protected final transient Logger logger = LogManager.getLogger(IDOLTracker.class); 

    public static void main(String[] args) { 
     logger.info(""); 
    } 
} 

然后,结构可以是如下:

ProgramFolder
| ----/config/log4j2.xml
| ---- MyClass.jar

当你运行你的jar时,它会在xml文件的jar外看起来。