我应该把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了很多东西之后),所以可能会有所帮助:
- 将log4j.properties放在项目的WEB-INF \ classes下,如前所述。
- 将log4j-xx.jar放在WEB-INF \ lib下
- 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-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
-
从主/unit testing来testing,类path是源目录
\Project\ src\ log4j.properties