Java 在servlet 3.0中使用Log4j2
我在web应用程序中使用Log4j2进行日志记录。 如果我创建任何简单的java类并调用我的记录器,它工作得非常好,并将日志打印到一个文件中。然而,如果我在servlet类中执行相同的操作,它将不起作用。 如文档中所述,我没有在web.xml中配置任何与log4j2相关的内容 Web.xml的代码: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
<?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>