我将log4j.properties
文件放在 Eclipse 项目结构中的什么位置,以便在此操作期间找到它:
PropertyConfigurator.configure("log4j.properties");
我找到了以下链接:
将 Log4j.properties 放入 Eclipse 项目的正确位置在哪里?
但是根据答案(选择),我认为该设置是针对服务器本身的,并且将是
适用于所有项目。但是我只希望这个.properties文件仅用于我相关的项目。
我的项目结构是:
AccountCeation //project name
Java Resources: src
com.alw.controllers //packages
.....
log4j.properties
我总是为此FileNotFoundException
。
注意:我正在开发一个带有Spring框架的动态Web应用程序。
请指导我在哪里失踪?
我能够在Apache Tomcat 6中运行Eclipse Dynamic Web项目找到此问题的解决方案。 Spring 中可能有一种更优雅的方式来访问上下文和加载资源。
两个基本步骤
(1) 将 log4j.properties 文件放入 war 文件的"类目录"中。
(2) 从当前上下文中读取 log4j 属性文件。 我发现最好的方法是访问当前线程的上下文并从那里开始工作。
对于上述第一步,更改 Eclipse 构建过程以添加一个附加目录,该目录最终将加载到 war 文件中的 WEB-INF/classes 目录中。具体说来。。。。
(1) 在 Eclipse 中,在项目资源管理器中右键单击您的项目,选择"新建"->"文件夹"。您可以将文件夹命名为任何名称,但在这种情况下,标准是"资源"。新文件夹应显示在项目的根级别。
(2) 将 log4j.properties 文件移动到这个新文件夹中。
(3) 再次右键单击项目,选择"构建路径"->"配置构建路径"。选择"来源"标签。单击"添加文件夹"按钮。浏览以查找在上述步骤 (1) 中创建的新文件夹。选择"确定"。
(4) 回到 eclipse 项目资源管理器视图后,请注意该文件夹现已移动到"Java 资源"区域(即由于 eclipse 演示文稿抽象,它不再位于根目录)。
(5) 干净构建项目。
(6) 要验证 .properties 文件现在是否存在于战争文件的 WEB-INF/类中,请将 war 文件导出到一个容易的位置(右键单击项目 -> 导出 -> 战争文件)并签出内容。请注意,log4j.properties 文件现在出现在 WEB-INF/classes 中。
现在是上面的第二步,访问上下文以读取文件。 在尝试读取文件的位置添加以下代码。 请注意,这会从 war 文件上下文中读取此内容,因此当 war 文件从一个服务器移动到另一个服务器时,这个"应该"起作用。
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
PropertyConfigurator.configure(classLoader.getResourceAsStream("log4j.properties") );