spring mvc自定义注解实现日志监控
程序员文章站
2022-06-22 15:33:47
...
直接上干货。
第二步:AOP编写日志实现类
第一步:编写自定义注解
@Target({ElementType. METHOD}) @Retention(RetentionPolicy.RUNTIME ) @Documented public @interface JpfLog { String moduleName(); //模块名称 String logType(); //日志类别 String desc() default "无描述信息" ;// }
@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); }
下一篇: mac sed目录文件内容替换
推荐阅读
-
Spring AOP +自定义注解 + Spel表达式 实现审计日志
-
Spring Boot分布式系统实践【基础模块构建3.3】注解轻松实现操作日志记录
-
spring+aop+自定义注解实现操作日志记录
-
spring+aop+自定义注解实现操作日志记录
-
springboot aop 自定义注解方式实现一套完善的日志记录(完整源码)
-
Spring Boot如何通过自定义注解实现日志打印详解
-
Spring Boot 中使用自定义注解,AOP 切面打印出入参日志及Dubbo链路追踪透传traceId
-
FeignClient原理解析,100行代码实现feign功能,mybatis的mapper、dubbo、feign实现原理模拟。spring扫描自定义注解原理。Javassist实现动态代理原理
-
Spring MVC JSON转换自定义注解
-
Spring3.0 + 自定义注解实现操作日志记录功能 AOP自定义注解javaspring