外部log4j.xml文件

rjee0c15  于 2023-10-18  发布在  其他
关注(0)|答案(9)|浏览(137)

我尝试在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

vqlkdk9b

vqlkdk9b1#

当使用-jar开关启动可执行jar文件时,类路径从jar文件的清单中获取。-cp开关(如果给定)将被忽略。
杰夫·斯托里的答案将是最简单的解决方案。或者,您可以将Class-Path属性添加到jar文件的清单中。

EDIT尝试启用log4j调试,并将log4j.xml的路径设置为完全限定的URL。举例来说:

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

vngu2lb82#

这一工作原理:

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

dfty9e193#

log4j2使用configurationFile选项:

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

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

6pp0gazn

6pp0gazn4#

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

1tuwyuhd

1tuwyuhd5#

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

    }
}
hrysbysz

hrysbysz6#

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文件。
请参阅Setting multiple jars in java classpath

x8diyxa7

x8diyxa77#

我在使用Sun的JDK和自动配置时遇到了问题。
你可以使用这个:

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

在使用Logger之前

o75abkj4

o75abkj48#

`` log4j 2 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("");
    }
}

那么结构可以是:
程序文件夹
|---- /config/log4j2.xml
|---- MyClass.jar
当您运行jar时,它将在jar外部查找xml文件。

v2g6jxz6

v2g6jxz69#

“-jar”只使用可执行文件jar中的类路径,而忽略-cp。在可执行文件jar中的类路径中添加“.”应该可以找到log4j.xml。

相关问题