我应该将 log4j.properties 文件放在哪里?

我使用 netbeans 6.7.1和 glassfish v2.1编写了一个 Web 服务项目,将 log4j.properties 放到项目的根目录中,并使用:

static Logger logger = Logger.getLogger(MyClass.class);

建造者:

PropertyConfigurator.configure("log4j.properties");

以及功能:

logger.info("...");
logger.error("...");
// ...

但是,它是错误信息(实际上,我已经尝试把它几乎每一个目录,我可以实现) :

log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297)
at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
at com.corp.ors.demo.OrsDemo.main(OrisDemo.java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.

示例项目可以从 http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8获得

348332 次浏览

该文件应该位于 WEB-INF/classes 目录中。 这个目录结构应该打包在 war 文件中。

您必须将它放在根目录中,这与您的执行上下文相对应。

例如:

    MyProject
src
MyClass.java
log4j.properties

如果从另一个项目开始执行,则需要在用于开始执行的项目中包含该文件。例如,如果一个不同的项目拥有一些 JUnit 测试,那么它也需要拥有它的 log4j.properties 文件。


我建议使用 log4j.xml 而不是 log4j.properties。

您可以使用 VM 参数指定配置文件位置-Dlog4j.configuration = “ file:/C:/workspace3/local/log4j.properties”

已经提供了一些技术上正确的具体答案,但是一般来说,它可以在运行时类路径上的任何地方,即 JVM 寻找类的任何地方。

这可能是 Eclipse 中的/src 目录或已部署应用程序中的 WEB-INF/classes 目录,但是最好了解类路径的概念以及为什么要将文件放在其中,不要只把 WEB-INF/classes 当作一个“魔术”目录。

我知道现在回答这个问题有点晚了,也许你已经找到了解决方案,但是我正在发布我找到的解决方案(在我谷歌了很多次之后) ,所以它可能会有一点帮助:

  1. 将 log4j.properties 放在项目的 WEB-INF 类下,就像前面在这个线程中提到的那样。
  2. 将 log4j-xx.jar 放在 WEB-INF lib 下
  3. 测试 log4j 是否已加载: 在 tomcat 的 java 选项的末尾添加 -Dlog4j.debug@

希望这个能帮上忙。

RGDS

试试:

PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));

我不知道这是否正确,但它解决了我的问题。 将 log4j.properties 文件放在“ project file”/config 中,并使用 PropertyConfigurator.configure (“ config//log4j.properties”) ;

它可以在 IDE 中工作,但是不能在自己运行 jar 文件时工作。 当您自己运行 jar 文件时,只需将 log4j.properties 文件复制到 jar 文件所在的文件夹中。

我发现 Glassfish 默认情况下会查看[ Glassfish 安装位置] Glassfish 域[你的域]作为默认工作目录... 你可以把 log4j.properties 文件放在这个位置,然后像前面提到的那样使用 PropertyConfigurator 在代码中初始化它..。

Properties props = System.getProperties();
System.out.println("Current working directory is " + props.getProperty("user.dir"));
PropertyConfigurator.configure("log4j.properties");

如前所述,log4j.properties 应该位于类路径中包含的目录中,我想补充的是,在一个最大化的项目中,一个好的位置可以是 src/main/resources/log4j.properties

我的 IDE 是 NetBeans

project's root folder

韦伯

web folder

WEB-INF

WEB-INF folder

要使用此属性文件,您应该编写以下代码:

package example;


import java.io.File;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import javax.servlet.*;
public class test {


public static ServletContext context;
static Logger log = Logger.getLogger("example/test");


public test() {


String homeDir = context.getRealPath("/");
File propertiesFile = new File(homeDir, "WEB-INF/log4j.properties");
PropertyConfigurator.configure(propertiesFile.toString());
log.info("This is a test");
}
}

您可以从另一个 JSP 文件定义 静态 ServletContext 上下文。 例如:

test.context = getServletContext();
test sample = new test();

现在可以在项目中使用 log4j.property 文件。

如果在 src 中放入 log4j.properties,则不需要使用-语句

PropertyConfigurator.configure("log4j.properties");

当属性文件位于类路径中时,它将被自动获取。

我花了很多时间来弄清楚为什么 Log4j.properties文件没有被看到。
然后我注意到它只有在 我的项目/目标/类/MyProject/src/main/resources文件夹中才可见。
希望对别人有用。
PS: 这个项目是基于专家的。

对于基于 Maven 的项目,将 log4j.properties 保存在 src/main/resources 中!

将 log4j.properties 放在类路径中。 这里有两个案例,将帮助您确定适当的位置- 1. 对于 web 应用程序,类路径是/WEB-INF/class。

\WEB-INF
classes\
log4j.properties
  1. 要从 main/unit test 进行测试,类路径是源目录

    \Project\
    src\
    log4j.properties
    

您的标准项目设置将有一个项目结构,类似于:

src/main/java
src/main/resources

如果将 log4j.properties 放在 resources 文件夹中,则可以创建资源文件夹(如果不存在)

实际上,我刚刚在一个标准的 Java 项目结构中遇到了这个问题,如下所示:

\myproject
\src
\libs
\res\log4j.properties

在 Eclipse 中,我需要添加 res 文件夹来构建 path,但是在 Intellij,我需要将 res 文件夹标记为资源,如链接截图所示: 右键单击 res 文件夹并标记为资源

有很多方法可以做到这一点:

方法1: 如果您正在尝试不使用 PropertyConfigurator 的 maven 项目 < strong >

第一: 检查 scr/main 上的资源目录

  if available,
then: create a .properties file and add all configuration details.
else
then: create a directory named resources and a file with .properties
write your configuration code/details.

下面是截图:

![enter image description here

Way2: 如果您正在尝试使用 java/maven 项目 使用 PropertyConfigurator的 Properties 文件

将属性文件放在项目中的任何位置,并给出正确的路径。 比如: < strong > src/javaLog4jProperties/log4j.properties

静态{

 PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");

}

enter image description here

方法3: 如果您在 java/maven 项目 使用 DOM 配置器中尝试使用 xml

将属性文件放在项目中的任何位置,并给出正确的路径。 比如: < strong > src/javaLog4jProperties/log4j.xml

静态{

 DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");

}

enter image description here

如果已经在项目结构中定义了 Log4J.properties,则不需要在 Log4J 类中指定 PropertyConfigurator.configure("log4j.properties");

在 Web 动态项目的情况下:-

您需要在 WebContent-> WEB-INF-> log4j.properties 下保存 log4j.properties

我希望这能帮到你。

打开 spark-shell

然后输入 System.getenv("SPARK_CONF_DIR")

这将打印你的 log4j.properties应该去哪里。

对我来说,当我把文件放在资源文件夹中时,它就起作用了。 还有,这是我项目的战争文件。我的建议是确保文件名为 log4j.properties,因为我的项目不能识别“ log4j2.properties”

log4j.properties in src/main/resources