Java 更改log4j.properties的位置

Java 更改log4j.properties的位置,java,log4j,Java,Log4j,我想将所有配置文件放在我的应用程序目录的/config子文件夹中。Log4j需要应用程序根文件夹中的Log4j.properties文件。有没有办法告诉log4j在哪里查找属性文件 使用PropertyConfiguration:是,定义log4j.configuration属性 java -Dlog4j.configuration=file:/path/to/log4j.properties myApp 请注意,该属性值必须是URL 有关详细信息,请阅读。中的“默认初始化过程”一节,您可以使

我想将所有配置文件放在我的应用程序目录的
/config
子文件夹中。Log4j需要应用程序根文件夹中的Log4j.properties文件。有没有办法告诉log4j在哪里查找属性文件

使用PropertyConfiguration:

是,定义
log4j.configuration
属性

java -Dlog4j.configuration=file:/path/to/log4j.properties myApp
请注意,该属性值必须是URL

有关详细信息,请阅读。

中的“默认初始化过程”一节,您可以使用它在磁盘中的任何位置加载log4j.properties

例如:

Logger logger = Logger.getLogger(this.getClass());
String log4JPropertyFile = "C:/this/is/my/config/path/log4j.properties";
Properties p = new Properties();

try {
    p.load(new FileInputStream(log4JPropertyFile));
    PropertyConfigurator.configure(p);
    logger.info("Wow! I'm configured!");
} catch (IOException e) {
    //DAMN! I'm not....

}

如果您有XML Log4J配置,请改用。

参考以下示例-


要更改记录器级别-
logger.getRootLogger().setLevel(Level.INFO)

在Eclipse中,可以将VM参数设置为:

-Dlog4j.configuration=file:///${workspace_loc:/MyProject/log4j-full-debug.properties}

这是我的类:路径很好,属性已加载

package com.fiserv.dl.idp.logging;

import java.io.File;
import java.io.FileInputStream;
import java.util.MissingResourceException;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;

public class LoggingCapsule {

    private static Logger logger = Logger.getLogger(LoggingCapsule.class);

    public static void info(String message) {


        try {

            String configDir = System.getProperty("config.path");
            if (configDir == null) {
                throw new MissingResourceException("System property: config.path not set", "", "");
            }
            Properties properties = new Properties();
            properties.load(new FileInputStream(configDir + File.separator + "log4j" + ".properties"));
            PropertyConfigurator.configure(properties);
        } catch (Exception e) {
            e.printStackTrace();

        }
        logger.info(message);
    }
    public static void error(String message){
        System.out.println(message);
    }

}

您必须像这样使用
log4j.configuration
属性:

java -Dlog4j.configuration=file:/path/to/log4j.properties myApp
如果文件位于类路径下(在./src/main/resources/folder内),则可以省略
文件://
协议:

java -Dlog4j.configuration=path/to/log4j.properties myApp

此方法的优点是,您可以基于每个应用指定属性文件位置,而不是在服务器级别。如果从应用程序目录结构之外的另一个文件读取属性文件的位置,则可以使用它在不同的服务器上选择不同的prop文件位置(例如,dev、test、prod)。将代码放入load-on-startup servlet中,就可以开始了。log4j2(新版本)没有DOMConfigurator类。我需要这个能力,但在新版本中我找不到任何方法。@Buhake Sindi…你说的是对的。但是代码行的数量太多了。如果我必须为我的web应用程序中90%的类编写日志,那么最佳实践是什么。我目前的解决方法是将log4j.properties保存在WEBINF/CLASSESS文件夹下,这样我就不必为文件路径编写代码,加载文件并进一步调用configure方法,我只需初始化一个静态记录器实例变量。如果有更好的方法,请在这里进行更新。@Sindi能否请您在PropertyConfigurator.configure(p)之后给出工作代码;因为没有指定打印我的日志path@pankaj您是如何在属性文件中配置log4j的?我应该将代码
ava-Dlog4j.configuration=file:/path/to/log4j.properties myApp
放在哪里?我正在使用eclipse。我的
log4j.properties
文件位于
src/resources
@Borat。您应该认真阅读Eclipse手册,但我会给您一个提示。运行->运行配置->参数选项卡->该选项卡上的VM参数面板。是。我明白了。我现在已经通过编程完成了。一种方法比另一种好吗?@Borat。在命令行上执行此操作可以在设置开发(登台)和生产环境时提供更大的灵活性,因为这两种环境的日志记录配置可能会有很大差异。在我看来,记录器配置应该由安装脚本编写,而不是硬编码到源代码中。谢谢Alex。我对这一点还不熟悉,还远没有登台和生产。您能告诉我在哪里可以阅读更多关于
安装脚本
、登台和生产问题的信息吗。我想自己动手做这件事。陈基。
java -Dlog4j.configuration=path/to/log4j.properties myApp