0

我应该将我的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 Framework 开发动态 Web 应用程序。

请指导我在哪里失踪?

4

1 回答 1

0

我能够找到在 Apache Tomcat 6 中运行 Eclipse 动态 Web 项目的解决方案。在 Spring 中可能有一种更优雅的方式来访问上下文并加载资源。

两个基本步骤

(1)将log4j.properties文件拿到war文件的“类目录”中。

(2) 从当前上下文中读取 log4j 属性文件。我发现最好的方法是访问当前线程的上下文并从那里工作。

对于上面的第一步,更改 Eclipse 构建过程以添加一个附加目录,该目录最终将加载到 war 文件中的 WEB-INF/classes 目录中。具体来说....

(1) 在 Eclipse 中,在项目资源管理器中右键单击您的项目,选择“新建”->“文件夹”。您可以将文件夹命名为任何名称,但在这种情况下,标准是“资源”。新文件夹应出现在项目的根级别。

(2) 将 log4j.properties 文件移动到这个新文件夹中。

(3) 再次右击工程,选择'Build-Path'->'Configure Build Path'。选择“来源”选项卡。单击“添加文件夹”按钮。浏览以找到您在上述步骤 (1) 中创建的新文件夹。选择“确定”。

(4) 一旦回到 eclipse Project Explorer 视图,请注意该文件夹现在已移动到“Java Resources”区域(即,由于 eclipse 表示抽象,它不再位于根目录)。

(5) 清理构建您的项目。

(6) 要验证 .properties 文件现在是否存在于您的 war 文件的 WEB-INF/classes 中,请将一个 war 文件导出到一个简单的位置(右键单击项目 -> 导出 -> War 文件)并检查其内容。请注意,log4j.properties 文件现在出现在 WEB-INF/classes 中。

现在进行上面的第二步,访问上下文以读取文件。在尝试读取文件的位置添加以下代码。请注意,这会从战争文件上下文中读取它,因此当战争文件从服务器移动到服务器时,这“应该”起作用。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
PropertyConfigurator.configure(classLoader.getResourceAsStream("log4j.properties") );
于 2014-04-29T15:49:39.283 回答