aop注釈方式はグローバルログ管理方法を実現する。
1:ログエンティティクラス
3:springServlet-mvc.xml
4:うどんを定義します。ここでは主に前置通知と異常通知を書きます。
以下、ユーザー定義のコメントを開始します。
このように、ユーザーは楽屋に訪問する時、正常にアクセスしても、バグデータベースが発生しても記録があります。
以上のaop注解方式は全体ログ管理方法を実現しました。つまり、小編集は皆さんに全部の内容を共有しました。参考にしてもらいたいです。どうぞよろしくお願いします。
public class SysLog {
/** */
private Integer id;
/** */
private String description;
/** */
private String method;
/** 0: ;1: */
private Integer logType;
/** ip */
private String requestIp;
/** */
private String exceptionCode;
/** */
private String exceptionDetail;
/** */
private String params;
/** */
private String createBy;
/** */
private String createDate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public Integer getLogType() {
return logType;
}
public void setLogType(Integer logType) {
this.logType = logType;
}
public String getRequestIp() {
return requestIp;
}
public void setRequestIp(String requestIp) {
this.requestIp = requestIp;
}
public String getExceptionCode() {
return exceptionCode;
}
public void setExceptionCode(String exceptionCode) {
this.exceptionCode = exceptionCode;
}
public String getExceptionDetail() {
return exceptionDetail;
}
public void setExceptionDetail(String exceptionDetail) {
this.exceptionDetail = exceptionDetail;
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getCreateDate() {
return createDate;
}
public void setCreateDate(String createDate) {
this.createDate = createDate;
}
}
2:mavenに必要なjar
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.1_3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
ここで要求される項目はjdk 1.7です。3:springServlet-mvc.xml
<!--proxy-target-class="true" cglib false spring -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
加えてproxy-targt class="true"はcontrollerの中をブロックするための方法です。4:うどんを定義します。ここでは主に前置通知と異常通知を書きます。
以下、ユーザー定義のコメントを開始します。
import java.lang.annotation.*;
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {
/** :add **/
public String operationType() default "";
/** : **/
public String operationName() default "";
}
そうめん類
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.gtcity.user.model.SysLog;
import com.gtcity.user.model.SysUser;
import com.gtcity.user.service.SysLogService;
/**
* @author panliang
* @version :2017-3-31
* @desc
*
*/
@Aspect
@Component
public class SystemLogAspect {
// Service
@Resource
private SysLogService systemLogService;
private static final Logger logger = LoggerFactory.getLogger(SystemLogAspect. class);
//Controller
// *
// *
// *
// .. 。
@Pointcut("execution (* com.gtcity.web.controller..*.*(..))")
public void controllerAspect() {
}
/**
*
* @author: panliang
* @time:2017-3-31 2:22:16
* @param joinPoint
* @describtion: Controller
*/
@Before("controllerAspect()")
public void doBefore(JoinPoint joinPoint) {
/* System.out.println("========== controller ===============");
if(logger.isInfoEnabled()){
logger.info("before " + joinPoint);
}*/
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpSession session = request.getSession();
// session
SysUser user = (SysUser) session.getAttribute("user");
if(user==null){
user=new SysUser();
user.setUserName(" ");
}
// IP
String ip = request.getRemoteAddr();
try {
String targetName = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
Class targetClass = Class.forName(targetName);
Method[] methods = targetClass.getMethods();
String operationType = "";
String operationName = "";
for (Method method : methods) {
if (method.getName().equals(methodName)) {
Class[] clazzs = method.getParameterTypes();
if (clazzs.length == arguments.length) {
operationType = method.getAnnotation(Log.class).operationType();
operationName = method.getAnnotation(Log.class).operationName();
break;
}
}
}
//*======== =========*//
System.out.println("=====controller =====");
System.out.println(" :" + (joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")+"."+operationType);
System.out.println(" :" + operationName);
System.out.println(" :" + user.getUserName());
System.out.println(" IP:" + ip);
//*======== =========*//
SysLog log = new SysLog();
log.setDescription(operationName);
log.setMethod((joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")+"."+operationType);
log.setLogType(0);
log.setRequestIp(ip);
log.setExceptionCode(null);
log.setExceptionDetail( null);
log.setParams( null);
log.setCreateBy(user.getUserName());
log.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
log.setRequestIp(ip);
//
systemLogService.insert(log);
System.out.println("=====controller =====");
} catch (Exception e) {
//
logger.error("== ==");
logger.error(" :{}", e.getMessage());
}
}
/**
*
* @author: panliang
* @time:2017-3-31 2:24:36
* @param joinPoint
* @describtion:
*/
@AfterThrowing(pointcut = "controllerAspect()", throwing="e")
public void doAfterThrowing(JoinPoint joinPoint, Throwable e) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
HttpSession session = request.getSession();
// session
SysUser user = (SysUser) session.getAttribute("user");
if(user==null){
user=new SysUser();
user.setUserName(" ");
}
// IP
String ip = request.getRemoteAddr();
String params = "";
if (joinPoint.getArgs() != null && joinPoint.getArgs().length > 0) {
params=Arrays.toString(joinPoint.getArgs());
}
try {
String targetName = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
Object[] arguments = joinPoint.getArgs();
Class targetClass = Class.forName(targetName);
Method[] methods = targetClass.getMethods();
String operationType = "";
String operationName = "";
for (Method method : methods) {
if (method.getName().equals(methodName)) {
Class[] clazzs = method.getParameterTypes();
if (clazzs.length == arguments.length) {
operationType = method.getAnnotation(Log.class).operationType();
operationName = method.getAnnotation(Log.class).operationName();
break;
}
}
}
/*======== =========*/
System.out.println("===== =====");
System.out.println(" :" + e.getClass().getName());
System.out.println(" :" + e.getMessage());
System.out.println(" :" + (joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()")+"."+operationType);
System.out.println(" :" + operationName);
System.out.println(" :" + user.getUserName());
System.out.println(" IP:" + ip);
System.out.println(" :" + params);
//========== =========
SysLog log = new SysLog();
log.setDescription(operationName);
log.setExceptionCode(e.getClass().getName());
log.setLogType(1);
log.setExceptionDetail(e.getMessage());
log.setMethod((joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()"));
log.setParams(params);
log.setCreateBy(user.getUserName());
log.setCreateDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
log.setRequestIp(ip);
//
systemLogService.insert(log);
System.out.println("===== =====");
} catch (Exception ex) {
//
logger.error("== ==");
logger.error(" :{}", ex.getMessage());
}
//========== ==========
logger.error(" :{} :{} :{} :{}", joinPoint.getTarget().getClass().getName() + joinPoint.getSignature().getName(), e.getClass().getName(), e.getMessage(), params);
}
}
5:controlllerの中にあります。
/**
*
* @author panliang
* @param request
* @param response
* @throws IOException
*/
@RequestMapping("/skipPage.do")
@Log(operationType="select :",operationName=" ")// : ,
public ModelAndView skipPage(HttpServletRequest request,HttpServletResponse response) throws IOException{
ModelAndView result=null;
String username = request.getParameter("email");
String password = request.getParameter("password");
int flag = sysUserService.login(request, username, password);
if(flag==1){//
result=new ModelAndView("redirect:/login/dispacher_main.do");
}else if(flag==2){//
result=new ModelAndView("redirect:/login/login.do?errorCode=1");
} else{//
result=new ModelAndView("redirect:/login/login.do?errorCode=2");
}
return result;
}
他の3つの通知を知りたいなら、このブログを参照してください。このように、ユーザーは楽屋に訪問する時、正常にアクセスしても、バグデータベースが発生しても記録があります。
以上のaop注解方式は全体ログ管理方法を実現しました。つまり、小編集は皆さんに全部の内容を共有しました。参考にしてもらいたいです。どうぞよろしくお願いします。