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

时间:2009-09-28 08:32:27

标签: java netbeans glassfish log4j

我使用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

获取

18 个答案:

答案 0 :(得分:111)

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

  1. 将log4j.properties放在项目的WEB-INF \ classes下,如前面提到的那样。
  2. 将log4j-xx.jar放在WEB-INF \ lib
  3. 测试是否加载了log4j:在tomcat的java选项末尾添加-Dlog4j.debug
  4. 希望这会有所帮助。

    RGDS

答案 1 :(得分:41)

如前所述,log4j.properties应该位于类路径中包含的目录中,我想在mavenized项目中添加一个好的地方src/main/resources/log4j.properties

答案 2 :(得分:26)

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

答案 3 :(得分:25)

您必须将其放在根目录中,该目录对应于您的执行上下文。

示例:

    MyProject
       src
           MyClass.java
           log4j.properties

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


我建议使用log4j.xml而不是log4j.properties。您有更多选择,可以从IDE获得帮助等等......

答案 4 :(得分:16)

对于基于Maven的项目,请将log4j.properties保存在src / main / resources中。别无其他!

答案 5 :(得分:14)

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

PropertyConfigurator.configure("log4j.properties");

当属性文件在类路径中时,它将自动进行。

答案 6 :(得分:10)

答案 7 :(得分:9)

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

答案 8 :(得分:7)

我的IDE是NetBeans。我把log4j.property文件放在图片中

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文件。

答案 9 :(得分:5)

我花了很多时间弄清楚为什么看不到 log4j.properties 文件。
然后我注意到只有当它在 MyProject / target / classes / MyProject / src / main / resources 文件夹中时才可见。
希望它对某人有用。
PS:该项目以maven为基础。

答案 10 :(得分:5)

已经提供了一些技术上正确的特定答案,但一般来说,它可以位于运行时类路径的任何位置,即JVM寻找类的任何位置。

这可能是Eclipse中的/ src目录或部署的应用程序中的WEB-INF / classes目录,但最好注意类路径概念以及文件放在其中的原因,不要仅仅处理WEB -INF / classes作为“魔术”目录。

答案 11 :(得分:3)

我发现Glassfish默认情况下将[Glassfish安装位置] \ glassfish \ domains [您的域名] \视为默认工作目录...您可以将log4j.properties文件放在此位置并在其中初始化使用PropertyConfigurator的代码如前所述......

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

答案 12 :(得分:1)

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

它可以与IDE一起使用,但不能在自己运行jar文件时使用。 当你自己运行jar文件时,只需将log4j.properties文件复制到jar文件所在的文件夹中。当jar文件和属性文件在同一目录中运行良好时。

答案 13 :(得分:1)

将log4j.properties放在classpath中。 以下两个案例将帮助您确定正确的位置 -  1.对于Web应用程序,类路径是/ WEB-INF / classes。

\WEB-INF      
    classes\
        log4j.properties
  1. 要从主/单元测试中测试,类路径是源目录

    \Project\
       src\
          log4j.properties
    

答案 14 :(得分:1)

如果你有一个使用Intellij的标准Maven项目设置,你可以简单地将log4j属性文件放在:

项目/ SRC /主/资源

IntelliJ - log4j properties location

答案 15 :(得分:0)

实际上,我刚刚在标准Java项目结构中遇到了以下问题:

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

在Eclipse中,我需要添加res文件夹以构建路径,但是,在Intellij中,我需要将res文件夹标记为资源,如链接的屏幕截图所示:right click on the res folder and mark as resources

答案 16 :(得分:0)

有很多方法可以做到:

方法1::如果您在maven项目中尝试而不使用PropertyConfigurator

第一:  在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

方法2::如果您正在尝试使用java / maven项目的属性文件,请使用PropertyConfigurator

将属性文件放置在项目中的任何位置,并提供正确的路径。 说: src / javaLog4jProperties / log4j.properties

静态{

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

}

enter image description here

方法3::如果您在Java / Maven项目上尝试使用xml,使用DOMConfigurator

将属性文件放置在项目中的任何位置,并提供正确的路径。 说: src / javaLog4jProperties / log4j.xml

静态{

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

}

enter image description here

答案 17 :(得分:0)

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

对于Web动态项目:-

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

希望对您有所帮助。