在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    Spring Boot – 自定義Aspect打印請求日志

    通常我們自定義一個Aspect用于記錄請求日志,方便問題排查。

    主要記錄了如下信息

    代碼實現(xiàn)

    import cn.hutool.core.util.StrUtil;import cn.hutool.json.JSONUtil;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;import java.net.InetAddress;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;@Slf4j@Aspect@Componentpublic class WebLogAspect { private final String LOCALHOST_IPV4 = “127.0.0.1”; private final String LOCALHOST_IPV6 = “0:0:0:0:0:0:0:1”; // 切入點 @Pointcut(“execution(public * demo.controller..*(..)))”) public void pointCut() { } @Around(“pointCut()”) public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable { // 開始處理時間 long startTime = System.currentTimeMillis(); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); // 構建成一條長日志,避免并發(fā)下日志輸出錯亂 StringBuilder sb = new StringBuilder(300); // 日志參數(shù) List reqArgs = new ArrayList(); sb.append(“================ Start ================”); // 打印路由 sb.append(“===> {}: {}”); String requestMethod = request.getMethod(); reqArgs.add(requestMethod); reqArgs.add(request.getRequestURL().toString()); // IP sb.append(“===> IP: {}”); reqArgs.add(getClientIp(request)); // 打印調用 controller 的全路徑以及執(zhí)行方法 sb.append(“===> Class Method: {}.{}”); reqArgs.add(joinPoint.getSignature().getDeclaringTypeName()); reqArgs.add(joinPoint.getSignature().getName()); // 打印請求頭 Enumeration headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { sb.append(“=== Headers === {}: {}”); String headerName = headerNames.nextElement(); reqArgs.add(headerName); reqArgs.add(StrUtil.join(“”, request.getHeader(headerName))); } // 打印請求入?yún)? sb.append(“===> request params: {}”); reqArgs.add(JSONUtil.toJsonStr(joinPoint.getArgs()));// List args = Arrays.asList(joinPoint.getArgs());// log.info(“Request Args : {}”, new Gson().toJson(args)); Object result = joinPoint.proceed();// // 打印出參// log.info(“Response Args : {}”, new Gson().toJson(result));// // 打印處理耗時 sb.append(StrUtil.format(“處理耗時: {} ms “, System.currentTimeMillis() – startTime)); sb.append(“================ End =================”); // 打印 log.info(sb.toString(), reqArgs.toArray()); return result; } // 獲取客戶端IP public String getClientIp(HttpServletRequest request) { String ipAddress = request.getHeader(“X-Forwarded-For”); if (StrUtil.isEmpty(ipAddress) || “unknown”.equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader(“Proxy-Client-IP”); } if (StrUtil.isEmpty(ipAddress) || “unknown”.equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader(“WL-Proxy-Client-IP”); } if (StrUtil.isEmpty(ipAddress) || “unknown”.equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if (LOCALHOST_IPV4.equals(ipAddress) || LOCALHOST_IPV6.equals(ipAddress)) { try { InetAddress inetAddress = InetAddress.getLocalHost(); ipAddress = inetAddress.getHostAddress(); } catch (UnknownHostException e) { e.printStackTrace(); } } } if (!StrUtil.isEmpty(ipAddress) && ipAddress.length() > 15 && ipAddress.indexOf(“,”) > 0) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(“,”)); } return ipAddress; }}

    鄭重聲明:本文內容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
    用戶投稿
    上一篇 2022年7月12日 15:26
    下一篇 2022年7月12日 15:26

    相關推薦

    • 分享4條發(fā)微商朋友圈的方法(微商朋友圈應該怎么發(fā))

      對于微商朋友來說,朋友圈的重要性不言而喻了。 那么微商的朋友圈到底該怎么發(fā)呢? 為什么同樣是經(jīng)營一個朋友圈,有的微商看起來逼格滿滿,實際效果也不錯;而有的卻動都不動就被屏蔽甚至拉黑…

      2022年11月27日
    • 存儲過程語法(sql server存儲過程語法)

      今天小編給各位分享存儲過程語法的知識,其中也會對sql server存儲過程語法進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧! oracle存儲過程基本語法…

      2022年11月26日
    • 計算機網(wǎng)絡技術論文(計算機網(wǎng)絡技術論文七千字)

      今天小編給各位分享計算機網(wǎng)絡技術論文的知識,其中也會對計算機網(wǎng)絡技術論文七千字進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關注本站,現(xiàn)在開始吧! 計算機網(wǎng)絡方面的論文3000字…

      2022年11月26日
    • 《寶可夢朱紫》夢特性怎么獲得?隱藏特性獲取方法推薦

      寶可夢朱紫里有很多寶可夢都是擁有夢特性會變強的寶可夢,很多玩家不知道夢特性怎么獲得,下面就給大家?guī)韺毧蓧糁熳想[藏特性獲取方法推薦,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 …

      2022年11月25日
    • 《寶可夢朱紫》奇魯莉安怎么進化?奇魯莉安進化方法分享

      寶可夢朱紫中的奇魯莉安要怎么進化呢?很多玩家都不知道,下面就給大家?guī)韺毧蓧糁熳掀骠斃虬策M化方法分享,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 奇魯莉安進化方法分享 奇魯莉安…

      2022年11月25日
    • 銳龍97900x參數(shù)規(guī)格跑分評測 銳龍97900x屬于什么檔次

      銳龍9 7900X是銳龍7000系列處理器中性能頂尖的型號之一,它采用了這一代標配的zen4架構和5nm制程工藝,那么它具體的參數(shù)跑分如何,在電腦上世紀發(fā)揮怎么樣呢,下面就來看看銳…

      2022年11月24日
    • 前三季度,市場規(guī)模超過五萬億元 信息消費展現(xiàn)蓬勃生機

      家居企業(yè)個性化全屋定制系統(tǒng),備受消費者青睞;主打專業(yè)電競的新款高性能便攜式計算機,銷量表現(xiàn)創(chuàng)新高;物流企業(yè)推出數(shù)智化供應鏈興農服務項目,助力優(yōu)質農產品出深山…… 不久前,工信部發(fā)布…

      2022年11月24日
    • 《寶可夢朱紫》暴飛龍怎么抓?暴飛龍獲得方法

      寶可夢朱紫暴飛龍位置在哪?在游戲中,很多玩家還不清楚暴飛龍具體要怎么樣獲得,其實獲得方法很簡單,暴飛龍直接是沒得抓的,需要玩家從寶貝龍進化得到,下面一起來看一下寶可夢朱紫暴飛龍獲得…

      2022年11月23日
    • 《寶可夢朱紫》布土撥怎么進化?布土撥進化方法介紹

      寶可夢朱紫中,不同的寶可夢有不同的進化方法,其中布土撥的進化方法是比較特殊的。很多玩家不知道寶可夢朱紫布土撥怎么進化,下面就帶來寶可夢朱紫布土撥進化方法介紹,一起來看看吧,希望能幫…

      2022年11月23日
    • 《寶可夢朱紫》薄荷怎么獲得?薄荷獲得方法

      寶可夢朱紫中薄荷有改變寶可夢的屬性或性格等效果,很多玩家想知道寶可夢朱紫薄荷怎么獲得,下面就帶來寶可夢朱紫薄荷獲得方法,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 薄荷獲得方法…

      2022年11月23日

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息