首先先到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}表明項目的根目錄,這樣配置當咱們項目部署到其餘地方的時候就不用去更改目錄了。