首先先到http://logging.apache.org/log4j/2.x/download.html下载log4j 2.xhtml
如图1:web的jar包java
如图1所示,是在WEB项目中使用log4j2须要的jar包。在WEB项目中咱们须要把它拷贝到WEB-INF目录的lib目录下。web
在WEB项目中使用log4j2须要在web.xml文件中配置以下的监听器和过滤器。apache
<listener> <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> </listener> <filter> <filter-name>log4jServletFilter</filter-name> <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class> </filter> <filter-mapping> <filter-name>log4jServletFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>
下面经过一个例子来讲明一下:tomcat
用eclipse新建一个Dynamic Web Project工程。而后建一个log4j2.jsp的文件内容以下:服务器
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>log4j2 web test</title> </head> <body> <form action="LogServlet" method="post"> <input type="submit"> </form> </body> </html>
建一个Servlet类LogServlet类容以下(为了更加清晰知道咱们使用了哪个日志类,我把import也贴出来了):app
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; /** * Servlet implementation class LogServlet */ public class LogServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LogServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Logger log = LogManager.getLogger(); log.info("log4j test"); log.debug("debug"); log.error("error"); } }
把log4j2的监听器和过滤器加入web.xml中:web.xml的类容以下:eclipse
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>invoicing</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- 配置log4j2 --> <listener> <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class> </listener> <filter> <filter-name>log4jServletFilter</filter-name> <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class> </filter> <filter-mapping> <filter-name>log4jServletFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> <filter> <filter-name>encoding</filter-name> <filter-class>org.wl.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <description></description> <display-name>LogServlet</display-name> <servlet-name>LogServlet</servlet-name> <servlet-class>org.wl.app.login.LogServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LogServlet</servlet-name> <url-pattern>/LogServlet</url-pattern> </servlet-mapping> </web-app>
而后咱们能够在tomcat服务器上运行程序,能够发如今项目的根目录下有logs文件夹下有一个app.log的日志文件。能够配置log4j2.xml更改。log4j2.xml配置文件要放在classpath下,通常放在src目录下。关于log4j2的配置能够参考:http://logging.apache.org/log4j/2.x/manual/customconfig.htmlwebapp
下面是log4j2.xml的配置,若是你使用的是eclipse你可能发现并无在项目根目录中找到日志文件,实际上是在项目所在的工做空间的\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps目录下,例如个人项目工做空间是E:\web1,那么实际的运行时的目录在下面的目录中,你能够在相应的目录中找到日志文件。jsp
E:\web1\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
<?xml version="1.0" encoding="UTF-8"?> <configuration status="error"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </Console> <File name="log" fileName="target/test.log" append="false"> <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/> </File> <RollingFile name="RollingFile" fileName="${web:rootDir}/logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/> <SizeBasedTriggeringPolicy size="20 MB" /> </RollingFile> </appenders> <loggers> <root level="info"> <appender-ref ref="RollingFile"/> <appender-ref ref="Console"/> <!-- <appender-ref ref="log" /> --> </root> </loggers> </configuration>
在上面的配置中注意其中${web:rootDir}表明项目的根目录,这样配置当咱们项目部署到其余地方的时候就不用去更改目录了。