Struts2和Log4j集成示例项目
时间:2020-02-23 14:36:05 来源:igfitidea点击:
今天,我们将学习如何在Struts2 Web应用程序中使用Log4j日志记录。
我们将通过一个简单的项目来学习它。
配置文件
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts2Log4jExample</display-name> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Web应用程序部署描述符很简单,并且配置为使用Struts2框架。
pom.xml
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Struts2Log4jExample</groupId> <artifactId>Struts2Log4jExample</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.15.1</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <warSourceDirectory>WebContent</warSourceDirectory> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> <finalName>${project.artifactId}</finalName> </build> </project>
需要注意的重要一点是我们将在项目中使用的struts2-core和log4j依赖项。
struts.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "https://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.convention.result.path" value="/"></constant> <package name="user" namespace="/" extends="struts-default"> <action name="home" class="com.theitroad.struts2.actions.HomeAction"> <result name="success">/home.jsp</result> </action> </package> </struts>
具有操作和结果页面映射的简单的struts配置文件。
log4j.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> <log4j:configuration xmlns:log4j="https://jakarta.apache.org/log4j/" debug="false"> <appender name="log4jexample" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="${catalina.home}/logs/example.log" <param name="Append" value="true" <param name="ImmediateFlush" value="true" <param name="MaxFileSize" value="20MB" <param name="MaxBackupIndex" value="10" <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n" </layout> </appender> <logger name="com.theitroad" additivity="false"> <level value="DEBUG" <appender-ref ref="log4jexample" </logger> <root> <level value="debug" <appender-ref ref="log4jexample" </root> </log4j:configuration>
简单的log4j xml配置文件,它应该位于classpath中,以便它位于WEB-INF/classes目录中,类似于struts配置文件。
使用log4j日志记录的操作类
package com.theitroad.struts2.actions; import org.apache.log4j.Logger; import com.opensymphony.xwork2.ActionSupport; public class HomeAction extends ActionSupport { private static final long serialVersionUID = 1L; private static final Logger logger = Logger.getLogger(HomeAction.class); public String execute(){ logger.info("inside HomeAction execute method"); return SUCCESS; } }
Struts2自动为我们配置log4j,我们可以直接在操作类中使用它。
请注意,Action类中的Logger初始化以及我们在execute方法中使用的日志记录。
导出并运行该项目后,将在example.log文件中获取以下日志。
23450 [http-bio-8080-exec-4] INFO com.theitroad.struts2.actions.HomeAction - inside HomeAction execute method 26346 [http-bio-8080-exec-6] INFO com.theitroad.struts2.actions.HomeAction - inside HomeAction execute method