在java Web应用程序中,如何使用spring 3.0注释从WEB-INB / conf位置读取log4j.xml

时间:2011-08-22 18:25:58

标签: spring-mvc log4j

我想将我的log4j.xml文件放在WEB-INF / conf目录中,其中有许多其他配置文件。我希望Web应用程序从那里读取log4.xml。

我试图使用spring3.0和注释。所以不确定如何访问servlet上下文以获取WEB-INF位置。

尝试了这个

InputStream ist = Thread.currentThread().getContextClassLoader().getResourceAsStream("/conf/log4j-my.xml");

但它搜索到tomcat / bin /

试过这个,但没多大帮助 DOMConfigurator.configure("WEB-INF/conf/log4j-my.xml");

非常感谢任何帮助/链接/指针。

1 个答案:

答案 0 :(得分:4)

不确定你真正想做什么......

如果您的log4j.xml在类路径中,当您启动app-server时,它应该自动加载。

启动服务器时检查控制台,您应该看到log4j信息。

你也可以把debug = true:

<log4j:configuration debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/">
你的xml中的

。您将能够看到有关配置的大量信息。

现在,如果你想访问你在log4j.xml中配置的appender,你所要做的就是:

Logger mylogger = Logger.getLogger("MyAppenderName");

好的,我想你想加载一个自定义的log4j配置文件!在Web应用程序上下文中,您将需要两件事:

创建contextListnerServlet; 修改你的web.xml

ServletListner:

public class StartupListener implements ServletContextListener
{
@Override
public void contextDestroyed(ServletContextEvent arg0)
{
    // Cleanup code goes here
}

@Override
public void contextInitialized(ServletContextEvent sce)
{
    Logger logger = null;
    String log4jFile = sce.getServletContext().getInitParameter("log4jFileName");
    DOMConfigurator.configure(sce.getServletContext().getRealPath(log4jFile));
    logger = LogManager.getLogger(StartupListener.class.getName());
    logger.debug("Loaded: " + log4jFile);
}

的web.xml:

<context-param>
<param-name>log4jFileName</param-name>
<param-value>
     WEB-INF/config/log4j-my.xml
</param-value>
</context-param>

<listener>
<listener-class>
    com.yourpackage.StartupListener
</listener-class>
</listener>

希望有所帮助