外部log4j.xml文件

时间:2010-04-07 17:51:44

标签: java logging log4j

我正在尝试在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之外,或者我是否必须将其与jar打包?

TIA

9 个答案:

答案 0 :(得分:49)

使用-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 ...

答案 1 :(得分:16)

这有效:

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

答案 2 :(得分:12)

对于log4j2,请使用 configurationFile 选项:

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

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

答案 3 :(得分:8)

您是否尝试过java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args>

答案 4 :(得分:6)

您可以在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());

    }
}

答案 5 :(得分:1)

我在使用Sun的JDK和自动配置时使用log4j时遇到了问题。

您可以使用:

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

使用Logger之前。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

java -cp&#34; path / to / your / log4jxml:path / to / yourjar.jar&#34; your.package.MainClass

目录中的log4j.xml&#34; path / to / your / log4jxml&#34;将覆盖&#34; path / to / yourjar.jar&#34;中的log4j.xml文件。

请参阅Setting multiple jars in java classpath

答案 8 :(得分: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时,它会在jar外面查找xml文件。