外部log4j.xml文件

我想在jar之外的文件系统上使用log4j.xml文件来运行jar,就像这样:

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(/ opt / 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外的configuration文件,或者我必须打包与jar?

TIA

使用-jar开关启动可执行jar文件时,classpath是从jar文件的清单中获得的。 如果给定, -cp开关将被忽略。

Jeff Storey的答案将是最简单的解决scheme。 或者,您可以将一个Class-Path属性添加到jar文件的清单中 。

编辑尝试启用log4jdebugging,并使pathlog4j.xml完全限定的URL。 例如:

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

这工作:

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

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

你可以在jar中定义一个默认的属性文件。 如果没有定义自定义属性,则可以使用此默认文件。如果定义了自定义属性,则可以覆盖默认属性。

myjar.jar文件包含log4j.default.configuration

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

 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()); } } 

对于log4j2,使用configurationFile选项:

 java -Dlog4j.configurationFile=/path/to/log4j2.xml -jar ... 

http://logging.apache.org/log4j/2.0/manual/configuration.html

使用Sun的JDK和自动configuration使用log4j时遇到了问题。

你可以使用这个:

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

在使用logging器之前。

“-jar”只使用可执行jar内的类path,而-cp被忽略。 添加“。” 到可执行jar中的类path应该允许log4j.xml来源。

java -cp“path / to / your / log4jxml:path / to / yourjar.jar”your.package.MainClass

目录“path / to / your / log4jxml”中的log4j.xml将覆盖“path / to / yourjar.jar”中的log4j.xml文件。

请参考在java classpath中设置多个jar 。

log4j2最简单的pathconfigurationis 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外面看。