首页 > 其他分享 >springboot接口入参出参日志打印

springboot接口入参出参日志打印

时间:2024-08-22 11:17:59浏览次数:9  
标签:String requestURI args iname public 日志 remoteAddr 参出 springboot

@Aspect
@Slf4j
@Component
@Order(-99)
public class LogHandler {

public static Map<String, AtomicInteger> nm = new ConcurrentHashMap();

@Value("${aop.log.no.enable:true}")
private boolean enableNo;

@Pointcut("execution(* com.test.controller.*Controll*.*(..))")
public void pointcut() {
}

@Pointcut("execution(* translateEnergy(..)) || execution(* mixAudioWrite(..))")
public void exclude_pointcut() {
}

@Around("pointcut() && !exclude_pointcut()")
public Object cost(ProceedingJoinPoint pj) throws Throwable {
try {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String requestURI = request.getRequestURI();
String requestMethod = request.getMethod();
String remoteAddr = HttpWebUtil.getIpAddr(request);

int n = 0;
if (enableNo) {
nm.putIfAbsent(remoteAddr, new AtomicInteger(1));
n = nm.get(remoteAddr).getAndIncrement();
}

MethodSignature signature = (MethodSignature) pj.getSignature();
ApiOperation annotation = signature.getMethod().getAnnotation(ApiOperation.class);
String iname = annotation == null ? "接口" : annotation.value();

Object[] args = pj.getArgs();
if (!excludeInputInterfaces(requestURI)) {
if (enableNo) {
log.info("【aop】{}.开始调用:[{}]{}, ip:{}, method:{}, 参数:{}", n, iname, requestURI, remoteAddr, requestMethod, JSONUtil.toJsonStr(args));
} else {
log.info("【aop】开始调用:[{}]{}, ip:{}, method:{}, 参数:{}", iname, requestURI, remoteAddr, requestMethod, JSONUtil.toJsonStr(args));
}
}else {
log.info("【aop】开始调用:[{}]{}, ip:{}, method:{}, 参数:该接口不打印入参", iname, requestURI, remoteAddr, requestMethod);
}
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof String) {
args[i] = ((String) args[i]).trim();
}
}
long bg = System.currentTimeMillis();
Object r = pj.proceed(args);
long ed = System.currentTimeMillis();
if (!excludeOutputInterfaces(requestURI)) {
if (enableNo) {
log.info("【aop】{}.结束调用:[{}]{}, ip:{}, 耗时:{}ms. 返回结果:{}", n, iname, requestURI, remoteAddr, ed - bg, JSONUtil.toJsonStr(r));
} else {
log.info("【aop】结束调用:[{}]{}, ip:{}, 耗时:{}ms. 返回结果:{}", iname, requestURI, remoteAddr, ed - bg, JSONUtil.toJsonStr(r));
}
}else {
log.info("【aop】结束调用:[{}]{}, ip:{}, 耗时:{}ms. 返回结果:该接口不打印出参", iname, requestURI, remoteAddr, ed - bg);
}
if (enableNo) {
if (requestURI.contains("/testWs")) {
nm.clear();
}
}

return r;
} catch (Throwable throwable) {
throw throwable;
}
}

/**
* 排除不打印入参接口
* @param requestURI
* @return
*/
public boolean excludeInputInterfaces(String requestURI){
List<String> interfacesList = Arrays.asList("/abc/util/abc");
return interfacesList.contains(requestURI);
}

/**
* 排除不打印出参接口
* @param requestURI
* @return
*/
public boolean excludeOutputInterfaces(String requestURI){
List<String> interfacesList = Arrays.asList("/abc/util/abc");
return interfacesList.contains(requestURI);
}

标签:String,requestURI,args,iname,public,日志,remoteAddr,参出,springboot
From: https://www.cnblogs.com/xiaoBastard/p/18373418

相关文章

  • springboot maven项目多环境profile配置,打包后配置文件properties或yml中的${}或@@变
    maven一些配置如下:项目中配置了多环境<profiles><!--数据库类型--><profile><!--mysql版默认--><id>mysql</id><activation><activeByDefault>true</activ......
  • 开源组件——异步日志方案 spdlog 的讲解
    一:日志的作用1、定义        日志(Log)是记录系统中发生的事件或操作的详细信息的文件或数据流。这些事件或操作可能包括程序执行、系统错误、用户活动、安全事件等日志(Log)是记录系统中发生的事件或操作的详细信息的文件或数据流。这些事件或操作可能包括程序执行、系......
  • SpringBoot中生成二维码的案例实战
    ❃博主首页:「码到三十五」,同名公众号:「码到三十五」,wx号:「liwu0213」☠博主专栏:<mysql高手><elasticsearch高手><源码解读><java核心><面试攻关>♝博主的话:搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,......
  • 从源码分析 SpringBoot 的 LoggingSystem → 它是如何绑定日志组件的
    开心一刻今天心情不好,想约哥们喝点我:心情不好,给你女朋友说一声,来我家,过来喝点哥们:行!我给她说一声我:你想吃啥?我点外卖哥们:你俩定吧,我已经让她过去了我:???我踏马让你过来!和她说一声哥们:哈哈哈,我踏马寻思让她过去呢前情回顾SpringBoot2.7霸王硬上弓Logback1.3→不甜但解渴......
  • 机械学习—零基础学习日志(如何理解概率论4)
    当已知一个概率,求解另外一个函数的概率。以下是离散型的概率计算方法。这里是连续型的,已知概念密度,计算对应的另外一个函数的概率。这里需要求解对应的原始函数。这里我们做一道练习题。《概率论与数理统计期末不挂科|考研零基础入门4小时完整版(王志超)》学习笔记王志......
  • 机械学习—零基础学习日志(如何理解概率论2)
    全概率公式与贝叶斯公式上面所提到的公式,可以使用上一篇文章的基本公式推导。使用到了概率的基本运算公式。完整的公式展示:习题练习:剩余的练习:第二题解析:第三题:第四题: 注意:《概率论与数理统计期末不挂科|考研零基础入门4小时完整版(王志超)》学习笔记......
  • springboot+vue高校多媒体教室管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和教育改革的不断深入,高校教学模式正逐步向信息化、智能化转型。多媒体教室作为现代化教学的重要载体,其管理效率与服务质量直接影响到教学活动的开展与教学效果的提升。然而,传统的高校多媒体教室管理方式多依赖......
  • springboot+vue高校多媒体教室管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展,高校教育日益依赖于多媒体教学手段来提升教学质量与效率。传统的高校教室管理模式面临着诸多挑战,如教室资源分配不均、使用效率低下、信息更新滞后等问题,严重制约了教育资源的优化配置与利用。因此,开发一套高效......
  • springboot+vue葛根庙镇乡村服务小程序【程序+论文+开题】-计算机毕业设计(1)
    系统程序文件列表开题报告内容研究背景随着数字乡村战略的深入实施,农村地区正逐步迈向信息化、智能化的发展道路。葛根庙镇,作为典型的乡村地区,其经济、社会、文化的全面发展离不开信息技术的有力支撑。然而,当前乡村服务信息散乱、获取渠道不畅、农牧技术推广效率低等问题日......
  • springboot+vue高校大学生党员活动管理平台【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,高校党建工作面临着新的机遇与挑战。随着大学生党员数量的不断增加,如何高效地组织、管理和展示党员活动,成为提升党建工作质量、增强党员凝聚力和战斗力的重要课题。传统的管理方式往往依赖于纸质材料和人工统计......