本篇内容主要讲解“nacos config的RequestLogAspect是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nacos config的RequestLogAspect是什么”吧!
本文主要研究一下nacos config的RequestLogAspect
nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/aspect/RequestLogAspect.java
@Aspect
@Component
public class RequestLogAspect {
/**
* publish config
*/
private static final String CLIENT_INTERFACE_PUBLISH_SINGLE_CONFIG
= "execution(* com.alibaba.nacos.config.server.controller.ConfigController.publishConfig(..)) && args"
+ "(request,response,dataId,group,tenant,content,..)";
/**
* get config
*/
private static final String CLIENT_INTERFACE_GET_CONFIG
= "execution(* com.alibaba.nacos.config.server.controller.ConfigController.getConfig(..)) && args(request,"
+ "response,dataId,group,tenant,..)";
/**
* remove config
*/
private static final String CLIENT_INTERFACE_REMOVE_ALL_CONFIG
= "execution(* com.alibaba.nacos.config.server.controller.ConfigController.deleteConfig(..)) && args(request,"
+ "response,dataId,group,tenant,..)";
/**
* publishSingle
*/
@Around(CLIENT_INTERFACE_PUBLISH_SINGLE_CONFIG)
public Object interfacePublishSingle(ProceedingJoinPoint pjp, HttpServletRequest request,
HttpServletResponse response, String dataId, String group, String tenant,
String content) throws Throwable {
final String md5 = content == null ? null : MD5.getInstance().getMD5String(content);
MetricsMonitor.getPublishMonitor().incrementAndGet();
return logClientRequest("publish", pjp, request, response, dataId, group, tenant, md5);
}
/**
* removeAll
*/
@Around(CLIENT_INTERFACE_REMOVE_ALL_CONFIG)
public Object interfaceRemoveAll(ProceedingJoinPoint pjp, HttpServletRequest request, HttpServletResponse response,
String dataId, String group, String tenant) throws Throwable {
return logClientRequest("remove", pjp, request, response, dataId, group, tenant, null);
}
/**
* getConfig
*/
@Around(CLIENT_INTERFACE_GET_CONFIG)
public Object interfaceGetConfig(ProceedingJoinPoint pjp, HttpServletRequest request, HttpServletResponse response,
String dataId, String group, String tenant) throws Throwable {
final String groupKey = GroupKey2.getKey(dataId, group, tenant);
final String md5 = ConfigService.getContentMd5(groupKey);
MetricsMonitor.getConfigMonitor().incrementAndGet();
return logClientRequest("get", pjp, request, response, dataId, group, tenant, md5);
}
/**
* client api request log rt | status | requestIp | opType | dataId | group | datumId | md5
*/
private Object logClientRequest(String requestType, ProceedingJoinPoint pjp, HttpServletRequest request,
HttpServletResponse response, String dataId, String group, String tenant,
String md5) throws Throwable {
final String requestIp = RequestUtil.getRemoteIp(request);
String appName = request.getHeader(RequestUtil.CLIENT_APPNAME_HEADER);
final long st = System.currentTimeMillis();
Object retVal = pjp.proceed();
final long rt = System.currentTimeMillis() - st;
// rt | status | requestIp | opType | dataId | group | datumId | md5 |
// appName
LogUtil.clientLog.info("{}|{}|{}|{}|{}|{}|{}|{}|{}", rt, retVal, requestIp, requestType, dataId, group, tenant,
md5, appName);
return retVal;
}
}
RequestLogAspect拦截了CLIENT_INTERFACE_PUBLISH_SINGLE_CONFIG、CLIENT_INTERFACE_GET_CONFIG、CLIENT_INTERFACE_REMOVE_ALL_CONFIG,它们都调用了logClientRequest方法,该方法会往日志打印客户端请求的信息
nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/utils/RequestUtil.java
public class RequestUtil {
private static final String X_REAL_IP = "X-Real-IP";
private static final String X_FORWARDED_FOR = "X-Forwarded-For";
private static final String X_FORWARDED_FOR_SPLIT_SYMBOL = ",";
public static final String CLIENT_APPNAME_HEADER = "Client-AppName";
//......
public static String getRemoteIp(HttpServletRequest request) {
String xForwardedFor = request.getHeader(X_FORWARDED_FOR);
if (!StringUtils.isBlank(xForwardedFor)) {
return xForwardedFor.split(X_FORWARDED_FOR_SPLIT_SYMBOL)[0].trim();
}
String nginxHeader = request.getHeader(X_REAL_IP);
return StringUtils.isBlank(nginxHeader) ? request.getRemoteAddr() : nginxHeader;
}
//......
}
RequestUtil的getRemoteIp方法首先从header获取X_FORWARDED_FOR,如果该值不为空,则用X_FORWARDED_FOR_SPLIT_SYMBOL分割取第一个;如果该值为空则取X_REAL_IP,如果不为空则返回,为空则取request.getRemoteAddr()
RequestLogAspect拦截了CLIENT_INTERFACE_PUBLISH_SINGLE_CONFIG、CLIENT_INTERFACE_GET_CONFIG、CLIENT_INTERFACE_REMOVE_ALL_CONFIG,它们都调用了logClientRequest方法,该方法会往日志打印客户端请求的信息
到此,相信大家对“nacos config的RequestLogAspect是什么”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/go4it/blog/3102601