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

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

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

在构造函数中:

 PropertyConfigurator.configure("log4j.properties"); 

和function:

 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

我知道现在回答这个问题有点晚了,也许你已经find了解决scheme,但是我发布了我find的解决scheme(在我search了很多东西之后),所以可能会有所帮助:

  1. 将log4j.properties放在项目的WEB-INF \ classes下,如前所述。
  2. 将log4j-xx.jar放在WEB-INF \ lib下
  3. testing是否加载了log4j:add -Dlog4j.debug @ tomcat的java选项结束

希望这会有所帮助。

RGDS

如前所述,log4j.properties应该包含在类path中的一个目录中,我想补充说,在一个mavenized项目中,一个好的地方可以是src/main/resources/log4j.properties

你必须把它放在根目录下,对应你的执行上下文。

例:

  MyProject src MyClass.java log4j.properties 

如果您从一个不同的项目开始执行,则需要在用于启动执行的项目中包含该文件。 例如,如果一个不同的项目包含一些JUnittesting,它也需要有它的log4j.properties文件。


我build议使用log4j.xml而不是log4j.properties。 你有更多的select,从你的IDE获得帮助,等等…

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

如果你把log4j.properties放在src里面,你不需要使用语句 –

 PropertyConfigurator.configure("log4j.properties"); 

当属性文件在类path中时,它将被自动获取。

对于基于Maven的项目,请将您的log4j.properties保存在src / main / resources中。 没有别的事情要做!

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

尝试:

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

我的IDE是NetBeans。 我把log4j.property文件如图所示

项目的根文件夹

卷筒纸

web文件夹

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"); } } 

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

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

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

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

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

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

我发现Glassfish在默认情况下将[Glassfish安装位置] \ glassfish \ domains [your domain] \作为默认工作目录…您可以将log4j.properties文件放在此位置,并使用PropertyConfigurator就像之前提到的…

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

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

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

将log4j.properties放在classpath中。 下面是帮助你确定正确位置的两种情况:1.对于Web应用程序,类path是/ WEB-INF / classes。

 \WEB-INF classes\ log4j.properties 
  1. 从主/unit testing来testing,类path是源目录

     \Project\ src\ log4j.properties