我能够在Apache Tomcat 6中运行Eclipse动态Web项目时找到解决此问题的解决方案。基本上,您需要从您的上下文中加载log4j属性文件。
两个基本步骤
(1)获取log4j.properties文件到战争文件的“类目录”。
(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文件导出到一个简单的位置(右键单击Project - > Export - > War file)并签出内容。请注意,log4j.properties文件现在出现在WEB-INF/classes中。
现在进行上述第二步,访问上下文以读取文件。在尝试读取文件的位置添加以下代码。请注意,这将从战争文件上下文中读出,所以这个'应该'会在战争文件从服务器移动到服务器时起作用。
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
PropertyConfigurator.configure(classLoader.getResourceAsStream("log4j.properties"));
您是否考虑将初始化逻辑移至过滤器或完整的servlet的初始化阶段? – 2011-03-28 18:57:01