代码之家  ›  专栏  ›  技术社区  ›  javamonkey79

外部log4j.xml文件

  •  37
  • javamonkey79  · 技术社区  · 14 年前

    我尝试在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 is文件与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打包它?

    蒂亚

    9 回复  |  直到 7 年前
        1
  •  49
  •   Community Dunja Lalic    7 年前

    当使用 -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 ...
    
        2
  •  15
  •   tibi    14 年前

    这工作:

    java -jar -Dlog4j.configuration="file:d:\log4j.xml" myjar.jar
    
        3
  •  12
  •   r00tGER    10 年前

    对于Log4j2,使用 配置文件 选项:

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

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

        4
  •  8
  •   Jeff Storey    14 年前

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

        5
  •  6
  •   Koray Güclü    12 年前

    您可以在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());
    
        }
    }
    
        6
  •  1
  •   VlatkoB    13 年前

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

    您可以使用:

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

    使用记录器之前。

        7
  •  0
  •   Thorbjørn Ravn Andersen    14 年前

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

        8
  •  0
  •   Community Dunja Lalic    7 年前

    java-CP“路径/to/u/Log4jxml:路径/to/ujjar”jar。

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

    请参考 Setting multiple jars in java classpath .

        9
  •  0
  •   another    7 年前

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

    然后结构可以是:

    程序文件夹
    |----/config/log4j2.xml
    |----myclass.jar

    运行JAR时,它将在JAR外部查找XML文件。