使用struts2的Introspector做日志

记录日志这个在每个系统都会必须会用到的功能,实现方案也是非常多

我列出使用Struts2的拦截器拦截action的方式来实现业务日志的记录

自定义Interceptor的代码如下:

package com.test;

import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.zbxsoft.flow.web.FlowDeployeAction;
import com.zbxsoft.flow.web.FlowHisActivityAction;

/**
 * 日志拦截器
 * <p>
 * 通过继承Struts2的AbstractInterceptor实现日志
 * </p>
 * @author 流浪鱼
 */
public class LogInterceptor extends AbstractInterceptor {
	private String logName;
	private String logContent;

	@Override
	public String intercept(ActionInvocation ai) throws Exception {
		//取到session
		Map<String, Object> session = ai.getInvocationContext() .getSession();
		//访问的Action类
		Object action = ai.getAction();
		//访问Action的方法
		String method = ai.getProxy().getMethod();
		//ai.invoke();// 执行被拦截action
		//流程定义日志
		if (action instanceof FlowDeployeAction) {
			 if(method.equals("data")){
				 logName = "流程定义列表";
				 logContent = "显示流程定义列表";
				//logManager.saveLog(projectId,logName,logContent); 保存到数据库
			 }
			 
			 if(method.equals("delete")){
				 logName = "流程定义删除";
				 //ai.getStack().findValue("deploymentId")可以取到action里边的参数值
				 logContent = "删除ID为:"+ai.getStack().findValue("deploymentId")+"的流程定义";
			 }
			
		 }
		
		//流程活动历史日志
		if (action instanceof FlowHisActivityAction) {
			 if(method.equals("data")){
				 logName = "流程活动历史节点";
				 logContent = "显示流程活动节点历史数据";
				//logManager.saveLog(projectId,logName,logContent); 保存到数据库
			 }
			 
		 }
		
		System.out.println("===============================进入LogInterceptor Start===================");
		System.out.println("访问的Action为"+action+"      对应方法为:"+method);
		System.out.println(logName +"      "+logContent);
		System.out.println("===============================进入LogInterceptor End===================");
		if(session.get("user")!=null){
			return Action.INPUT;
		}else{
			return ai.invoke();// 执行被拦截action;
		}
		
	}

}

 

 

struts2的配置自定义的拦截器代码如下:

<interceptors>
			<!-- 自定义日志拦截器 -->
			<interceptor name="log" class="com.test.LogInterceptor" />


			<interceptor-stack name="crudStack">
				
				<interceptor-ref name="store">
					<param name="operationMode">AUTOMATIC</param>
				</interceptor-ref>
				<interceptor-ref name="paramsPrepareParamsStack" />
				<interceptor-ref name="log"/>


			</interceptor-stack>
		</interceptors>

		<default-interceptor-ref name="crudStack" />

你可能感兴趣的:(struts2)