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

mon*_*ono 130 java netbeans log4j glassfish

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

static Logger logger = Logger.getLogger(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

在构造函数中:

PropertyConfigurator.configure("log4j.properties");
Run Code Online (Sandbox Code Playgroud)

和功能:

logger.info("...");
logger.error("...");
// ...
Run Code Online (Sandbox Code Playgroud)

但是,它是错误信息(实际上,我试图将它几乎放在我能够实现的每个目录上):

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.
Run Code Online (Sandbox Code Playgroud)

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

小智 112

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

  1. 将log4j.properties放在项目的WEB-INF\classes下,如前面在此线程中所述.
  2. 将log4j-xx.jar放在WEB-INF\lib下
  3. 测试是否加载了log4j:添加-Dlog4j.debug@tomcat的java选项的结尾

希望这会有所帮助.

RGDS


sti*_*vlo 44

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


Mak*_*tun 26

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

  • 只是一个可能有助于避免一些挫败感的更新:如果您使用 log4j2,参数的名称已更改为``log4j.configurationFile``` (2认同)

KLE*_*KLE 25

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

例:

    MyProject
       src
           MyClass.java
           log4j.properties
Run Code Online (Sandbox Code Playgroud)

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


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


小智 16

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


Ani*_*Ani 13

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

PropertyConfigurator.configure("log4j.properties");
Run Code Online (Sandbox Code Playgroud)

它将在属性文件位于类路径中时自动获取.


小智 10

尝试:

PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));
Run Code Online (Sandbox Code Playgroud)


Mar*_*nor 9

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

  • 它应该在WEB-INF/classes中并打包在war文件中 (3认同)

Ali*_*dov 7

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

项目的根文件夹

卷筒纸

网络文件夹

WEB-INF

WEB-INF文件夹

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

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

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

test.context = getServletContext(); 
test sample = new test(); 
Run Code Online (Sandbox Code Playgroud)

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


Bri*_*ian 5

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

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


Red*_*dCH 5

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