在Java Web应用程序中,如何使用Spring 3.0批注从WEB-INB / conf位置读取log4j.xml
问题内容:
我想将我的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");
将不胜感激任何帮助/链接/指针。
问题答案:
不知道您真正想做什么…
如果您的log4j.xml位于类路径中,则在启动应用程序服务器时,应自动加载它。
启动服务器时检查控制台,您应该会看到log4j信息。
你也可以把debug = true:
<log4j:configuration debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/">
在您的xml中。您将能够看到许多有关您的配置的信息。
现在,如果要访问在log4j.xml中配置的附加程序,只需要做的是:
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>
希望能帮助到你