Java 在servlet 3.0中使用Log4j2

Java 在servlet 3.0中使用Log4j2,java,log4j2,servlet-3.0,Java,Log4j2,Servlet 3.0,我在web应用程序中使用Log4j2进行日志记录。 如果我创建任何简单的java类并调用我的记录器,它工作得非常好,并将日志打印到一个文件中。然而,如果我在servlet类中执行相同的操作,它将不起作用。 如文档中所述,我没有在web.xml中配置任何与log4j2相关的内容 Web.xml的代码: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchem

我在web应用程序中使用Log4j2进行日志记录。 如果我创建任何简单的java类并调用我的记录器,它工作得非常好,并将日志打印到一个文件中。然而,如果我在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>
我没有明确地将log4j2.xml文件放在WEB-INF文件夹中,因为我已经在classpath中添加了这个文件,它在我构建项目后自动添加到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中添加log4j2jar,或者在WEB-INF/classes中没有添加它的配置

当您调用简单java类时,您依赖的是与web应用程序不同的类路径


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

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

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

当您调用简单java类时,您依赖的是与web应用程序不同的类路径



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

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

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

“它不工作”仍然是SA上最好的错误描述。。。您至少可以指定您得到的错误是什么吗?编译器错误、运行时错误或记录器无法访问日志文件,您在服务器上找不到日志文件吗,它是什么?:)这很奇怪,但我没有得到任何错误!只是没有生成日志。如果是这样的话,您必须在logger配置中输入完整名称。我的Servlet类直接放在src文件夹下。我还尝试在配置文件中为logger指定不同的名称,如“myLogger”,并在MyServlet.java中使用它。我是一个新手,正在尝试学习Java,我已经检查了tomcat的所有日志文件,任何地方都没有记录错误。关于控制台记录器,您是否在tomcat日志文件的任何地方看到日志消息(请尝试“tomcat_HOME/logs/”)!?如果没有,请在方法中尝试一个简单的控制台调试消息,而不使用记录器,然后查看是否可以首先找到该消息。“它不工作”仍然是SA上的最佳错误描述。。。您至少可以指定您得到的错误是什么吗?编译器错误、运行时错误或记录器无法访问日志文件,您在服务器上找不到日志文件吗,它是什么?:)这很奇怪,但我没有得到任何错误!只是没有生成日志。如果是这样的话,您必须在logger配置中输入完整名称。我的Servlet类直接放在src文件夹下。我还尝试在配置文件中为logger指定不同的名称,如“myLogger”,并在MyServlet.java中使用它。我是一个新手,正在尝试学习Java,我已经检查了tomcat的所有日志文件,任何地方都没有记录错误。关于控制台记录器,您是否在tomcat日志文件的任何地方看到日志消息(请尝试“tomcat_HOME/logs/”)!?如果没有日志,请在方法中尝试一个简单的控制台调试消息,并查看是否可以首先找到该消息。很抱歉错过这些详细信息。我使用的是Tomcat 8.5,我已将log4j2(core和api)的2个主要jar文件放在WEB-INF/lib文件夹中,配置文件也存在于WEB-INF/classes文件夹中。我将我的项目导出为WAR文件,并将其放在Tomcat web apps文件夹中。请至少发布实际错误(如果有),并使用记录器显示一行不起作用的代码。我正在通过ajax调用调用我的servlet。ajax调用成功,但日志代码未执行,也未给出任何编译或运行时错误。我们需要帮助您的是:使用日志记录器的servlet代码片段、log4j2配置以及您得到的确切错误(堆栈跟踪、无错误但无日志记录等),请添加所有有用的信息,不是作为对问题的回答,而是对问题的回答,这样其他人可能会在不阅读所有评论的情况下提供帮助。很抱歉,错过了这些详细信息。我使用的是Tomcat 8.5,我已将log4j2(core和api)的2个主要jar文件放在WEB-INF/lib文件夹中,配置文件也存在于WEB-INF/classes文件夹中。我将我的项目导出为WAR文件,并将其放在Tomcat web apps文件夹中。请至少发布实际错误(如果有),并使用记录器显示一行不起作用的代码。我正在通过ajax调用调用我的servlet。ajax调用成功,但日志代码未执行,也未给出任何编译或运行时错误。我们需要帮助您的是:使用日志记录器的servlet代码片段、log4j2配置以及您得到的确切错误(堆栈跟踪、无错误但无日志记录等),请将所有有用的信息添加到问题中,而不是作为答复,这样其他人就可以在不阅读所有评论的情况下提供帮助。
    <?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>