我在我的 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/