我使用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.
获取
答案 0 :(得分:111)
我知道回答这个问题有点晚了,也许你已经找到了解决方案,但是我发布了我找到的解决方案(在我搜索了很多之后)所以它可能会有所帮助:
-Dlog4j.debug
希望这会有所帮助。
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文件放在图片中
根
网络
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");
}
}
您可以从另一个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
要从主/单元测试中测试,类路径是源目录
\Project\
src\
log4j.properties
答案 14 :(得分:1)
答案 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.
跟随屏幕截图:
方法2::如果您正在尝试使用java / maven项目的属性文件,请使用PropertyConfigurator
将属性文件放置在项目中的任何位置,并提供正确的路径。 说: src / javaLog4jProperties / log4j.properties
静态{
PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");
}
方法3::如果您在Java / Maven项目上尝试使用xml,使用DOMConfigurator
将属性文件放置在项目中的任何位置,并提供正确的路径。 说: src / javaLog4jProperties / log4j.xml
静态{
DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");
}
答案 17 :(得分:0)
如果您已经在项目结构中定义了log4j.properties,则无需在Log4J类中指定PropertyConfigurator.configure("log4j.properties");
。
对于Web动态项目:-
您需要将log4j.properties保存在WebContent-> WEB-INF-> log4j.properties下
希望对您有所帮助。