Java Log4j不';看不到.properties文件

Java Log4j不';看不到.properties文件,java,log4j,Java,Log4j,我使用log4j登录我的应用程序。在每个类中,我都需要记录以下内容: Properties props = new Properties(); try { props.load(new FileInputStream("/log4j.properties")); } catch (Exception e){ LOG.error(e); } PropertyConfigurator.configure(props); log4j.prope

我使用log4j登录我的应用程序。在每个类中,我都需要记录以下内容:

Properties props = new Properties();
    try {
        props.load(new FileInputStream("/log4j.properties"));
    } catch (Exception e){
        LOG.error(e);
    }
PropertyConfigurator.configure(props);
log4j.properties放在/src/main/resources文件夹中/


IDEA给出了path/log4.properties作为复制参考。当我启动我的应用程序时,它会显示FileNotFoundException

不使用
FileInputStream

    Properties props = new Properties();
    try {
        InputStream inStream = **YOUR_CLASS_NAME**.class.getResourceAsStream("/log4j.properties");
        props.load(inStream);
    } catch (Exception e){
        LOG.error(e);
    }
    PropertyConfigurator.configure(props);
java.io
及其配偶与当前工作目录一起工作,即执行JVM的目录,而不是代码工作区

为了说明这一点,请考虑下面的代码

class ReadFrmFile {
    public static void main(String args[]) {
        FileInputStream fin = New FileInputStream("intemp.txt");
    }
}
如果代码是从
C:\TEMP
执行的,则在这种情况下,
intemp.txt
应位于工作目录(
C:/TEMP
)。如果不是,这将抛出
FileNotFoundException
。文件名的路径始终是绝对的,而不是相对的

为了避免硬编码,最好的方法是将所有必需的文件放在类路径中,并使用
getResourceAsStream
()加载它们


不要使用
FileInputStream

    Properties props = new Properties();
    try {
        InputStream inStream = **YOUR_CLASS_NAME**.class.getResourceAsStream("/log4j.properties");
        props.load(inStream);
    } catch (Exception e){
        LOG.error(e);
    }
    PropertyConfigurator.configure(props);
java.io
及其配偶与当前工作目录一起工作,即执行JVM的目录,而不是代码工作区

为了说明这一点,请考虑下面的代码

class ReadFrmFile {
    public static void main(String args[]) {
        FileInputStream fin = New FileInputStream("intemp.txt");
    }
}
如果代码是从
C:\TEMP
执行的,则在这种情况下,
intemp.txt
应位于工作目录(
C:/TEMP
)。如果不是,这将抛出
FileNotFoundException
。文件名的路径始终是绝对的,而不是相对的

为了避免硬编码,最好的方法是将所有必需的文件放在类路径中,并使用
getResourceAsStream
()加载它们


默认情况下,log4j在类路径中查找
log4j.properties
文件,因此如果类路径的根目录中不存在该文件,则无需使用类
propertyConfiguration

在中,您将看到:


log4j默认情况下会在类路径中查找
log4j.properties
文件,因此,如果类路径的根目录中不存在该文件,则无需使用类
propertyConfiguration

在中,您将看到:


不要使用
FileInputStream
,请使用您的
类#getResourceAsStream()
,因为该文件位于类路径上。另外,您不需要自己加载log4j属性。如果我自己不加载log4j.properties,我会得到类似“log4j未找到配置。正确配置log4j”的信息。您将文件放在哪里?那不是/src/main/resources/应该放在哪里。您必须以不同的方式执行其他操作。不要使用
FileInputStream
,请使用您的
类#getResourceAsStream()
,因为该文件位于类路径上。另外,您不需要自己加载log4j属性。如果我自己不加载log4j.properties,我会得到类似“log4j未找到配置。正确配置log4j”的信息。您将文件放在哪里?那不是/src/main/resources/应该放在哪里。你一定在做别的事情。