`
小古墓
  • 浏览: 59425 次
  • 性别: 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);
      }
 
     
分享到:
评论

相关推荐

    SpringMVC利用AOP实现自定义注解记录日志

    总结,Spring MVC结合AOP和自定义注解可以方便地实现日志记录功能,无需侵入业务代码。这种方法具有良好的可扩展性和灵活性,可以轻松适应不同场景的日志需求。同时,通过调整切面的定义,我们可以控制日志记录的...

    Spring mvc mybatis plus 实现AOP 切面日志系统

    综上所述,本项目结合了Spring MVC、MyBatis Plus和AOP,构建了一个具备日志记录和存储功能的系统,为开发团队提供了一种有效的监控和分析手段,有助于提升应用的稳定性和可维护性。由于提供了数据库支持,开发者...

    Spring MVC注解项目实例

    通过实现`HandlerInterceptor`接口或继承`AbstractHandlerInterceptor`,我们可以自定义拦截逻辑,比如记录日志、权限检查、性能监控等。在这个实例中,可能使用了拦截器来增强功能或确保安全。 4. **数据库操作**:...

    spring自定义注解实现拦截器的实现方法

    在Spring框架中,自定义注解结合AOP(面向切面编程)是实现业务逻辑与非业务逻辑分离的一种有效方式。通过自定义注解,可以针对不同的业务场景灵活地添加功能,比如权限控制、日志记录、事务管理等。本文将详细讨论...

    springMVC AOP拦截拦截Controller等实现日志管理

    在Spring MVC中,AOP(面向切面编程)是一种强大的工具,可以让我们在不修改代码的情况下,对程序的特定部分进行增强,例如日志记录、事务管理或性能监控。在这个场景中,我们将讨论如何利用AOP来实现Controller的...

    springmvc log4j2 logback 注解 jackson 日志脱敏实现源码

    在IT行业中,日志记录是系统监控和故障排查的关键环节,但同时也涉及到用户隐私保护的问题。日志脱敏就是一种确保敏感数据在日志中不被泄露的技术手段。本资源包含的是关于`SpringMVC`、`Log4j2`、`Logback`以及`...

    Spring MVC示例

    拦截器可以用来实现通用的功能,如登录检查、日志记录、性能监控等。在Spring MVC中,自定义的拦截器需要实现`HandlerInterceptor`接口并注册到`HandlerMapping`。 10. **异常处理**: Spring MVC提供了统一的...

    spring mvc + mybatis 完整例子

    4. **拦截器**:Spring MVC支持自定义拦截器,可以实现登录验证、日志记录等功能。 5. **异常处理**:通过@ControllerAdvice和@ExceptionHandler可以全局处理异常,提供统一的错误页面。 二、MyBatis 框架 1. **...

    spring mvc 搭建依赖包

    在Spring MVC中,AOP可以用于在Controller方法执行前后添加拦截器,实现如性能监控、安全检查等功能。 2. **Spring JDBC (Java数据库连接)** `spring-jdbc-3.2.0.RELEASE.jar` 提供了对JDBC的抽象层,简化了数据库...

    spring mvc学习代码

    通过实现HandlerInterceptor接口或者使用自定义注解+@AspectJ实现。 6. **配置**:Spring MVC的配置通常包括Spring的Context配置(如bean定义、依赖注入)和Spring MVC的DispatcherServlet配置(如视图解析器、拦截...

    spring mvc_09

    在"spring mvc annotation interceptor"这个主题中,我们将深入探讨如何利用注解来配置和实现Spring MVC的拦截器。 1. **注解驱动的Spring MVC** - `@Controller`: 这个注解标记一个类为处理HTTP请求的控制器。它...

    springmvc项目源码

    源码中可能会包含自定义的拦截器实现,这些拦截器可以进行权限校验、日志记录、性能监控等预处理或后处理操作。 6. **异常处理**: 通过 `@ExceptionHandler` 或全局异常处理器,你可以定制化错误页面和异常处理...

    真实案例!java自定义注解实战!.pdf

    在Java中,自定义注解通常与Spring MVC的拦截器或AOP(面向切面编程)一起使用,以实现更灵活的控制流。 创建自定义注解包括以下几个关键部分: 1. **注解声明**:自定义注解以`@interface`关键字开头,定义一个...

    Spring MVC 集合各种功能点

    开发者可以通过实现HandlerInterceptor接口,创建自定义拦截器,实现如权限验证、日志记录等功能。拦截器是比过滤器更高级的概念,因为它可以访问到更多的请求上下文信息。 过滤器(Filter)在Servlet规范中定义,...

    spring mvc系列教程源码

    在Spring MVC中,MyBatis可以通过Spring的`SqlSessionFactoryBean`和`MyBatisSqlSessionFactoryBean`配置,结合`@Mapper`注解的接口,实现DAO层的简单易用。 5. **Freemarker**: Freemarker是一个模板引擎,用于...

    spring mvc整合jpa后项目

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。它作为Spring框架的一部分,...此外,持续集成、自动化测试和日志监控也是不可或缺的部分,这些都使得开发流程更加规范和高效。

    Mastering Spring Webmvc

    通过实现HandlerInterceptor接口或者使用Spring MVC提供的预定义拦截器,可以轻松地添加自定义拦截逻辑。 九、上传下载文件 Spring MVC支持文件上传和下载功能。通过MultipartFile接口处理上传的文件,而文件下载则...

    整合spring data jpa + spring mvc + easyui

    通过提供泛型的Repository接口,Spring Data JPA能够自动实现常见的CRUD操作,同时支持自定义查询方法。开发者只需要定义接口,无需编写实现类,极大地提高了开发效率。JPA则是Java EE规范,用于对象关系映射,使得...

    跟我学Spring MVC

    - **注解式控制器**是Spring MVC推荐的一种控制器实现方式。 - **主要注解**: - `@Controller`:标记类为控制器。 - `@RequestMapping`:映射请求到处理方法。 - `@RequestParam`:获取请求参数。 - `@...

    spring mvc框架

    10. **AOP(面向切面编程)**:Spring MVC可以与Spring的AOP模块结合,实现如日志记录、事务管理等横切关注点。 11. **国际化的支持**:通过消息资源文件和`@MessageSource`,Spring MVC允许应用支持多语言环境。 ...

Global site tag (gtag.js) - Google Analytics