Web项目添加接口响应时长
来源:互联网 发布:数据编码最小单位是 编辑:程序博客网 时间:2024/05/02 02:25
背景:前几天公司上线了一个项目(手机H5项目)说是用户和老板都觉得相应速度比较慢,然后下来要查找原因,所以就需要统计服务器端接口调用时长。
方案:
1.Logback+code
具体的操作步骤就是在每个方法的调用前后加上时间点,然后再把这些结果记录到日志中。
接口内调用的代码:
@Override public User getUserInfo(int userId) { Long correspondingStartTime = System.currentTimeMillis(); logger.debug("debug_getUserInfo userId\t" + userId); try { User user = userInfoService.getUserInfo(userId); if(user==null||userId<=0){ logger.debug("getUserInfo userId==null"+userId); }else{ logger.debug("getUserInfo userId\t" + userId + ",response:" + user.toString()); } Long correspondingEndTime = System.currentTimeMillis(); CorrespondingTime.correspondingTime("UserServiceImpl", "getUserInfo", correspondingStartTime, correspondingEndTime); return user; } catch (RuntimeException e) { logger.error("getUserInfo userId:" + userId, e); // 封装对象。 User user = new User(); return user.setError(getBaseResponse(e)); } }
相应时长统计类:
public class CorrespondingTime { private static final Logger logger = LoggerFactory.getLogger("CorrespondingTimeLog"); public static void correspondingTime(String clazzName,String methodName,Long correspondingStartTime,Long correspondingEndTime){ logger.info(clazzName+";"+methodName+";"+(correspondingEndTime-correspondingStartTime)); }}
Logback添加日志文件:
<appender name="correspondingTime" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>../user-log/server-correspondingTime.log</File> <encoder> <pattern>%m%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>../user-log/server-correspondingTime.log.%d{yyyy-MM-dd}</fileNamePattern> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>info</level> </filter> </appender> /*日志文件名称*/ <logger name="CorrespondingTimeLog" additivity="false"> <appender-ref ref="correspondingTime" /> </logger>
2.Spring AOP
既然Spring aop能够在方法内输出日志,那么在方法内部肯定能够实现对接口响应时长的统计。查找资料如下:
@Aspect@Componentpublic class TimestatAspect { private static final Logger LOG = LoggerFactory.getLogger(TimestatAspect.class); @Around("execution(* com.baidu.soa.crm.user.dao.impl.*DaoImpl.*(..))") public Object printTime(ProceedingJoinPoint pjp) throws Throwable { long l1 = System.currentTimeMillis(); Object obj = pjp.proceed(); String param = "("; Object[] params = pjp.getArgs(); if (params != null) { boolean first = true; for (Object o : params) { String p = (o == null ? "null" : o.toString()); if (first) { param = param + p; first = false; } else param = param + ":" + p; } } param = param + ")"; LOG.debug("类名为:" + pjp.getTarget().getClass().getName() + "|方法名为:" + pjp.getSignature().getName() + "|参数为:" + param + "|执行时间为:" + (System.currentTimeMillis() - l1)); return obj; }}
总结:
1、比较好想,也容易实现但是有点土鳖。如果需要统计的接口过多,那么改动量就很大,不推荐。
2、调用Spring AOP自身属性,比较简单,能够实现对多出接口的统计,赞!
0 0
- Web项目添加接口响应时长
- android listVIew添加长按响应事件
- web python -- WSGI接口响应
- VisualC++ 打开或向项目添加文件时停止响应
- 网站或接口响应时间较长应该如何排查?
- Listview用回调接口方式添加按钮响应
- Web 项目添加log4j
- web应用添加socket接口
- 在对UITableView添加长按事件的时候,有的列表不响应长按
- Web项目添加Maven支持
- web项目添加mavean功能
- Web项目添加Maven支持
- 为web项目添加logback
- web项目添加logback日志
- web项目接入webservice接口时使用的jar
- 为zarafa-admin添加web接口问题解决
- listView item添加长按菜单,并对菜单做出响应
- 在linux虚拟机的tomcat上发布web项目时,远程无法访问,响应码404...
- poj 3278
- 【bzoj3991】【SDOI2015】【寻宝游戏】【dfs序】
- 高通APQ8074 spi 接口配置
- Grape-demo1
- 面向对象程序设计具有4个共同特征:抽象性、封装性、继承性和多态性
- Web项目添加接口响应时长
- unity3d的斜边分屏实现
- LeetCode:Game of Life
- android中dip、px相互换算
- Android Studio添加使用Assets
- reactor和proactor的区别
- Oracle 11g 发行版2 新安装后关于登录的一些基本操作
- 在Eclipse中遇到The type XXX cannot be resolved. It is indirectly referenced from required .class files错误
- SQLServer2005配置远程连接,留着以后用