• Java 输出本地方法metho


    
    @Aspect
    @Component
    @Slf4j
    public class ServiceExceptionAspect {
    
        @Around("execution(* com.sankuai.groceryauth.auth.poiquery.service.thrift..*.*(..)) || " +
                "execution(* com.sankuai.groceryauth.auth.poiquery.service.crane..*.*(..))")
        public Object doAop(ProceedingJoinPoint pjp) throws Throwable {
            String targetClassName = pjp.getTarget().getClass().getSimpleName();
            MethodSignature signature = (MethodSignature) pjp.getSignature();
            String methodName = signature.getName();
            String methodFullName = targetClassName + "." + methodName;
            Object[] args = pjp.getArgs();
    
            log.info("method called:{},param:{}", methodFullName, args);
    
            Method setCode = Arrays.stream(signature.getReturnType().getMethods())
                    .filter(method -> "setCode".equalsIgnoreCase(method.getName()))
                    .findFirst()
                    .orElse(null);
    
            Method setMsg = Arrays.stream(signature.getReturnType().getMethods())
                    .filter(method -> "setMsg".equalsIgnoreCase(method.getName()))
                    .findFirst()
                    .orElse(null);
    
            if (setMsg == null) {
                setMsg = Arrays.stream(signature.getReturnType().getMethods())
                        .filter(method -> "setMessage".equalsIgnoreCase(method.getName()))
                        .findFirst()
                        .orElse(null);
            }
    
            try {
                Object result = pjp.proceed();
                return result;
            } catch (IllegalArgumentException e) {
                if (setMsg != null && setCode != null) {
                    Object result = signature.getReturnType().newInstance();
                    setCode.invoke(result, Constants.BAD_PARAMETERS);
                    setMsg.invoke(result, e.getMessage());
                    log.info("IllegalArgumentException :", e);
                    return result;
                }
                throw e;
            } catch (AuthTException e) {
                int code = e.getCode();
                String message = e.getMessage();
                log.warn("ServiceExceptionAspect catch BusinessException, method:{},param:{}, code:{}, message:{}",
                        methodFullName, args, code, message, e);
    
                doCatLog(methodFullName, e);
                if (setMsg != null && setCode != null) {
                    Object result = signature.getReturnType().newInstance();
                    setMsg.invoke(result, e.getMessage());
                    setCode.invoke(result, e.getCode());
                    return result;
                }
                throw e;
            } catch (Throwable e) {
                log.error("TServiceExceptionAspect catch Throwable, method:{},param:{}", methodFullName, args, e);
                doCatLog(methodFullName, e);
                if (setMsg == null || setCode == null) {
                    throw e;
                } else {
                    Object result = signature.getReturnType().newInstance();
                    setMsg.invoke(result, "系统内部错误");
                    setCode.invoke(result, Constants.INTERNAL_ERROR);
                    return result;
                }
            }
        }
    
        private void doCatLog(String methodFullName, Throwable e) {
            if (e instanceof AuthTException) {
                AuthTException ex = (AuthTException) e;
                int code = ex.getCode();
                String message = ex.getMessage();
                logBusinessException(methodFullName, ex, code, message);
            } else {
                Cat.logEvent("SystemError", methodFullName);
                Cat.logErrorWithCategory("SystemError-" + methodFullName, "traceId:" + Tracer.id(), e);
                MetricHelper.build().name("SystemError").tag("method", methodFullName).count();
            }
        }
    
        private void logBusinessException(String methodFullName, Exception ex, int code, String message) {
            Cat.logEvent("BusinessException-" + code, methodFullName);
            MetricHelper.build().name("BusinessException-" + code).tag("method", methodFullName).count();
    
            if (code == Constants.GATEWAY_ERROR) {
                Cat.logEvent("GatewayError", methodFullName);
                Cat.logErrorWithCategory("GatewayError-" + methodFullName, "traceId:" + Tracer.id() + "." + message, ex);
                MetricHelper.build().name("GatewayError").tag("method", methodFullName).count();
            }
        }
    }
  • 相关阅读:
    BFS 路径记录
    KMP算法
    STL标准库-容器-deque 双端队列
    4. 位运算(快速幂)
    词频统计(未完成,错误)
    字符串转整形
    AVL平衡二叉树的各种问题(Balanced Binary Tree)
    string用scanf读入printf输出(节省时间)
    【转】Java魔法堂:String.format详解
    【转】关于Android资源文件中出现百分号的问题
  • 原文地址:https://www.cnblogs.com/honghong75042/p/14254315.html
Copyright © 2020-2023  润新知