`
小古墓
  • 浏览: 58301 次
  • 性别: Icon_minigender_1
  • 来自: 山东
社区版块
存档分类
最新评论

spring mvc自定义注解实现日志监控

阅读更多
直接上干货。
 
第一步:编写自定义注解
 
@Target({ElementType. METHOD})
@Retention(RetentionPolicy.RUNTIME )
@Documented
public @interface JpfLog {
      
      String moduleName(); //模块名称
      String logType(); //日志类别
      String desc() default "无描述信息" ;//
}
   
第二步:AOP编写日志实现类
 
    
 @Aspect
     @Component
     public class LogAspect {
      
      @Autowired
      private JFLogService jFLogService;
      
      //标注该方法体为后置通知,当目标方法执行成功后执行该方法体 
    @AfterReturning("within(com.xxx.*.web..*) && @annotation(rl)") 
    public void insertLogSuccess(JoinPoint jp, JpfLog rl){ 
      String moduleName = rl.moduleName() ;
      String signature = jp.getSignature().toString(); //获取目标方法签名 
        String methodName = signature.substring(signature.lastIndexOf("." )+1, signature.indexOf("(")); 
       
        JFLog jFLog = new JFLog();
            jFLog.setId(CodeHelper. createUUID());
            jFLog.setModuleName(moduleName);
            jFLog.setMethodName(methodName);
            jFLog.setExceptionContent( "");
            jFLog.setLogType(rl.logType());
            HttpServletRequest request=ContextHolderUtils. getRequest();
            String broswer=BrowserUtils. checkBrowse(request);
            jFLog.setBroswer(broswer);
            jFLog.setOperateTime( new Date());
            jFLog.setUser(ResourceUtil. getSessionUserName());
            String ip = oConvertUtils. getIpAddrByRequest(request);
                         //如果访问路径为localhost,则获得的ip值为“0:0:0:0:0:0:0:1”
             if( "0:0:0:0:0:0:0:1".equals(ip)){
                  ip = "127.0.0.1";
            }
            jFLog.setIp(ip);
            jFLog.setFlag(StringConstant. SUCCESS);
            jFLog.setRemark(rl.desc());
             jFLogService.saveLog(jFLog);
    } 
 
    //标注该方法体为异常通知,当目标方法出现异常时,执行该方法体 
    @AfterThrowing(pointcut= "within(com.xxx.*.web..*) && @annotation(rl)", throwing="ex") 
    public void insertLog(JoinPoint jp, JpfLog rl, CRUDException ex){ 
      String moduleName = rl.moduleName() ;
      String signature = jp.getSignature().toString(); //获取目标方法签名 
        String methodName = signature.substring(signature.lastIndexOf("." )+1, signature.indexOf("(")); 
       
        JFLog jFLog = new JFLog();
            jFLog.setId(CodeHelper. createUUID());
            jFLog.setModuleName(moduleName);
            jFLog.setMethodName(methodName);
            jFLog.setExceptionContent(ex.getMessage());
            jFLog.setLogType(rl.logType());
            HttpServletRequest request=ContextHolderUtils. getRequest();
            String broswer=BrowserUtils. checkBrowse(request);
            jFLog.setBroswer(broswer);
            jFLog.setOperateTime( new Date());
            jFLog.setUser(ResourceUtil. getSessionUserName());
            String ip = oConvertUtils. getIpAddrByRequest(request);
                         //如果访问路径为localhost,则获得的ip值为“0:0:0:0:0:0:0:1”
             if( "0:0:0:0:0:0:0:1".equals(ip)){
                  ip = "127.0.0.1";
            }
            jFLog.setIp(ip);
            jFLog.setFlag(StringConstant. ERROR);
            jFLog.setRemark(rl.desc());
             jFLogService.saveLog(jFLog);
    }
   
}
    
注:@AfterReturning为注解方法体成功执行后,执行的方法。@AfterThrowing为注解方法体抛出CRUDException 异常时执行的方法。JoinPoint jp参数可以获得注解方法体的相关值,包括类名、方法名、参数等信息。JpfLog rl参数为自定义注解的类,可以获得自定义注解的值。
 
第三步:Spring mvc配置文件
               
<!-- 启用@AspectJ支持,从而可以实现通过注解方式将通知编织到非公共方法中 -->
       <aop:aspectj-autoproxy />
 
第四步:自定义注解的使用
            
            
/**
       * 保存新增的人员
       * @param modelMap
       * @param user
       * @return
       * @throws CRUDException
       * @throws Exception
       */
      @JpfLog(moduleName="人员",logType=StringConstant. Log_Type_INSERT,desc= "")
      @RequestMapping(value = "/saveByAdd")
      public ModelAndView saveUserByAdd(ModelMap modelMap, User user) throws CRUDException {
             userService.saveUser(user);
             return new ModelAndView(StringConstant. ACTION_DONE, modelMap);
      }
 
     
分享到:
评论

相关推荐

    基于Springboot+Mybatis+ SpringMvc+springsecrity+Redis完整网站后台管理系统

    日志表:使用aop拦截实现 权限控制:基于token方式,禁用session 对各种不同异常进行了全局统一处理 使用lombok简化java代码,让源码更简洁,可读性高 mybatis未进行二次封装,原滋原味,简单sql采用注解,复杂...

    springboot学习思维笔记.xmind

    Spring MVC的常用注解 @Controller @RequestMapping @ResponseBody @RequestBody @PathVariable @RestController Spring MVC的基本配置 静态资源映射 拦截器配置 @ControllerAdivce ...

    spring-boot mybaits shiro redis整合

    注解redis缓存数据,Spring-session和redis实现分布式session同步(建议按功能模块划分系统)。 6、日志 =========== logback打印日志,业务日志和调试日志分开打印。同时基于时间和文件大小分割日志文件。 9、...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 Spring MVC 基本配置 87 4.4.1 静态资源映射 88 4.4.2 拦截器配置 89 4.4.3 @ControllerAdvice 91 4.4.4 其他配置 94 4.5 Spring MVC 的高级配置 98 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 Spring MVC 基本配置 87 4.4.1 静态资源映射 88 4.4.2 拦截器配置 89 4.4.3 @ControllerAdvice 91 4.4.4 其他配置 94 4.5 Spring MVC 的高级配置 98 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    4.3 Spring MVC 的常用注解 82 4.3.1 点睛 82 4.3.2 示例 83 4.4 Spring MVC 基本配置 87 4.4.1 静态资源映射 88 4.4.2 拦截器配置 89 4.4.3 @ControllerAdvice 91 4.4.4 其他配置 94 4.5 Spring MVC 的高级配置 98 ...

    springboot参考指南

    关闭Spring MVC DispatcherServlet vii. 65.7. 关闭默认的MVC配置 Spring Boot参考指南 7 viii. 65.8. 自定义ViewResolvers v. 66. 日志 i. 66.1. 配置Logback ii. 66.2. 配置Log4j i. 66.2.1. 使用YAML或JSON配置...

    企业后台管理基础框架 hsweb.zip

    演示示例:demo.hsweb.me测试用户:test (test2,test3,test4....) 密码:123456演示项目源码:hsweb-demo技术选型第三方:MVC:spring-boot. 开箱即用,学习成本低,部署方便(main方法运行).ORM:mybatis. 配置灵活,简单方便...

    JAVA上百实例源码以及开源项目源代码

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    JAVA上百实例源码以及开源项目

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

Global site tag (gtag.js) - Google Analytics