java - 在servlet 3.0中使用Log4j2

标签 java log4j2 servlet-3.0

我在我的 Web 应用程序中使用 Log4j2 进行日志记录。 如果我创建任何简单的 java 类并调用我的 logger ,它会工作得很好并将日志打印在文件中。但是,如果我在 servlet 类中执行相同的操作,则它不起作用。 正如文档中所指定的,我没有在 web.xml 中配置与 log4j2 相关的任何内容。

Web.xml 代码:

<?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>

在 Servlet 类中记录代码:

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

我没有明确地将 log4j2.xml 文件放在 WEB-INF 文件夹中,因为我已将此文件添加到类路径中,在构建项目后它会自动添加到 WEB-INF/classes 中。

我是否缺少一些配置?

代码行:

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");

    }

log4j2.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
      <Appenders>
        <Console name="Console">
          <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <File name="MyFile" filename="C:/Users/jasleen_kathuria/Documents/logs/info.log">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
      </Appenders>
<Loggers>
<logger name="MyServlet" level="TRACE">
        <AppenderRef ref="MyFile"/>
    </logger>
</Loggers>

最佳答案

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

尽管如此,主要问题可能是您没有在 WEB-INF/lib 中添加 log4j2 jar 和/或它在 WEB-INF/classes 中的配置。

当您调用简单的 java 类时,您将依赖于网络应用程序中不同的类路径。

确保 log4j2.jar 已部署,例如您可以构建 war,将其解压缩并查看其中包含的内容。

关于java - 在servlet 3.0中使用Log4j2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43040695/

相关文章:

java - SVN:替换为>存储库中的最新内容和团队>恢复之间的区别

java - 在 Java 8 中使用函数式接口(interface)作为 filter() 函数的参数

json - 使用 log4j2 编写自定义 json 消息的最佳方法

java - 在weblogic控制台上查看eclipse link JPA执行的SQL查询或使用log4j配置的日志文件

servlets - Async Servlet - 首选实现

java - 线程中断

java - 请放心 - 无法序列化,因为无法确定如何序列化内容类型

java - 如何发现加载的log4j2配置的完整路径?

Spring 的 WebApplicationInitializer + servlet 注册在 Debian 上的 Apache Tomcat 8.0.32 上不起作用

java - 是否可以在运行时(启动后)添加jar(使用web-fragment.xml)