在servlet 3.0中使用Log4j2

时间:2017-03-27 07:49:50

标签: java log4j2 servlet-3.0

我在我的Web应用程序中使用Log4j2进行日志记录。 如果我创建任何简单的java类并调用我的记录器,它可以很好地工作并将日志打印在一个文件中。但是,如果我在servlet类中执行相同操作,则无法正常工作。 如文档中所述,我没有在web.xml中配置与log4j2相关的任何内容。

Web.xml代码:

 

在Servlet类中记录代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xmlns="http://xmlns.jcp.org/xml/ns/javaee"     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>SampleWebApp</display-name>
<welcome-file-list>
<welcome-file>Welcome.jsp</welcome-file>
</welcome-file-list>
</web-app>

我没有明确地将log4j2.xml文件放在WEB-INF文件夹中,因为我在classpath中添加了这个文件,在构建项目后它自动添加到WEB-INF / classes中。

我错过了一些配置吗?

代码行:

public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final Logger log=LogManager.getLogger(MyServlet.class);

log4j2.xml:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub

        log.error("i am inside servlet");
        /*response.getWriter().append("Served at: ").append(request.getContextPath());*/
        System.out.println("GET called");

    }

2 个答案:

答案 0 :(得分:0)

您至少应该说明如何构建/部署您的Web应用程序,在哪个servlet容器上,以及如何将添加到类路径中。

同样,主要问题可能是您没有在WEB-INF / lib中添加log4j2 jar,或者在WEB-INF / classes中添加它的配置。

当您调用简单的java类时,您依赖于Web应用程序中的其他类路径。

确保部署了log4j2.jar,例如你可以构建war解压缩并查看它包含的内容。

答案 1 :(得分:0)

在我重新启动Tomcat并清除浏览器缓存后,它得到了解决。我现在可以看到正在打印的日志。