我能够找到在 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") );