自定义log注解,请求抓取

34 篇文章 0 订阅
11 篇文章 0 订阅
  •  自定义log注解,请求抓取,配合切面手段,轻松实现日志埋点
  • CP_OperateLog
/*
 * COPYRIGHT Beijing cp-boss-Tech Co.,Ltd.                                   *
 ****************************************************************************
 * 源文件名:  CP_OperateLog.java
 * 功能: cpframework框架
 * 版本:	@version 1.0
 * 编制日期: 2013年12月30日 上午10:58:09
 * 修改历史: (主要历史变动原因及说明)
 * YYYY-MM-DD |    Author      |	 Change Description
 * 2013年12月30日    |    hanqunfeng     |     Created
 */
package com.demo;

import java.lang.annotation.*;

/**
 *Description: <功能操作日志注解>. <br>
 *<p>
	<声明在被spring管理的类的方法上,会记录下当前的操作日志类型>
	比如:@CP_OperateLog(value="注解日志",type=1,key="test")
 </p>
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CP_OperateLog {




	/**
     * 用户操作名称
     * @return 用户操作名称,默认为空串
     */
    String value() default "";

    /**
     * 用户操作类型,默认类型为0<br/>
     * 0 - 其他操作 <br/>
     * 1 - 查询 <br/>
     * 2 - 新增 <br/>
     * 3 - 修改 <br/>
     * 4 - 删除
     * @return 用户操作类型
     */
    CP_GlobalNamingConstant type() default CP_GlobalNamingConstant.OPERATE_DEFAULT;

    /**
     * 用户操作名称对应的key,可以通过该key值在属性文件中查找对应的value
     * @return key
     */
    String key() default "";
}


  • CP_GlobalNamingConstant
/*******************************************************************************
 * COPYRIGHT Beijing cp-boss-Tech Co.,Ltd.                                      *
 *******************************************************************************
 * 源文件名: CP_GlobalNamingConstant.java
 * 功能:
 * 版本:	1.0
 * 编制日期: 2009-4-22
 * 说明:
 * 修改历史: (主要历史变动原因及说明)
 * YYMMDD      |     Author    |    Change Description
 * 2009-4-22    Liujiajun         Created
 *******************************************************************************/
package com.demo;


public enum CP_GlobalNamingConstant {


	/**
	 * ****************************************************
	 * 用户操作日志记录类型定义<br/>
	 * ****************************************************
	 */

	/**
	 * 用户操作类型:导入
	 */
	OPERATE_IMPORT("导入"),

	/**
	 * 用户操作类型:导出
	 */
	OPERATE_EXPORT("导出"),

	/**
	 * 用户操作类型:获取对象
	 */
	OPERATE_ENTUITY("获取对象"),

	/**
	 * 用户操作类型:获取列表
	 */
	OPERATE_LIST("获取列表"),

	/**
	 * 用户操作类型:添加记录
	 */
	OPERATE_ADD("添加记录"),

	/**
	 * 用户操作类型:修改记录
	 */
	OPERATE_MODIFY("修改记录"),

	/**
	 * 复制对象
	 */
	OPERATE_COPY("复制对象"),

	/**
	 * 用户操作类型:删除记录
	 */
	OPERATE_DELETE("删除记录"),

	/**
	 * 用户操作类型:编辑记录
	 */
	OPERATE_EDIT("编辑记录"),

	/**
	 * 用户操作类型:数据详细信息
	 */
	OPERATE_DETAIL_MODIFY("修改记录"),

	/**
	 * 用户操作类型:上传
	 */
	OPERATE_UPLOAD("上传"),

	/**
	 * 用户操作类型:下载
	 */
	OPERATE_DOWNLOAD("下载"),

	/**
	 * 用户操作类型:缓存管理
	 */
	OPERATE_CACHE("缓存管理"),

	/**
	 * 用户操作类型:默认
	 */
	OPERATE_DEFAULT("默认");

	private String desc;//中文描述

	/**
	 * 私有构造,防止被外部调用
	 * @param desc
	 */
	private CP_GlobalNamingConstant(String desc){
		this.desc=desc;
	}

	/**
	 * 定义方法,返回描述,跟常规类的定义没区别
	 * @return
	 */
	public String getDesc(){
		return desc;
	}

	/**
	 * 覆盖
	 * @return
	 */
	@Override
	public String toString() {
		return desc;
	}
}
  • 切面处理注解 LogAspect

import com.veckchina.intelctrl.common.annotation.FixedFileUrlWithSsl;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;

@Aspect
@Component
public class LogAspect {

	@Pointcut("@annotation(com.veckchina.intelctrl.common.annotation.CP_OperateLog)")
	public void RestControllerPointCut() { };
	
	@Around("RestControllerPointCut()")
	public Object afterReturning(ProceedingJoinPoint joinPoint) throws Throwable {
		Object result = joinPoint.proceed();
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
		String referer = request.getHeader("Referer");
		Signature signature = joinPoint.getSignature();
//		获取方法上的注解
		MethodSignature methodSignature = (MethodSignature) signature;
        Method method = methodSignature.getMethod();
        CP_OperateLog anno = AnnotationUtils.findAnnotation(method, CP_OperateLog.class);
		return result;
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值