springboot 日志攔截器, 用于記錄請(qǐng)求的時(shí)間

package com.fioc.ect.fproject.web.interceptors;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.core.NamedThreadLocal;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

import com.fioc.ect.fproject.utils.DateUtil;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.text.SimpleDateFormat;

/**

* @Author wulei

* @Title: LogInterceptor

* @Description: 日志攔截器, 用于記錄請(qǐng)求的時(shí)間

* @Date 2018/10/25 13:14

*/

public class LogInterceptor implements HandlerInterceptor {

? ? /**

? ? * logger

? ? */

? ? private static final Logger logger = LoggerFactory.getLogger(LogInterceptor.class);

? ? private static final ThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<>("ThreadLocal StartTime");

? ? @Override

? ? public boolean preHandle(HttpServletRequest request, HttpServletResponse response,

? ? ? ? ? ? ? ? ? ? ? ? ? ? Object handler) {

? ? ? ? if (logger.isDebugEnabled()) {

? ? ? ? ? ? // 1、開(kāi)始時(shí)間

? ? ? ? ? ? long beginTime = System.currentTimeMillis();

? ? ? ? ? ? // 線程綁定變量(該數(shù)據(jù)只有當(dāng)前請(qǐng)求的線程可見(jiàn))

? ? ? ? ? ? startTimeThreadLocal.set(beginTime);

? ? ? ? ? ? logger.debug("開(kāi)始計(jì)時(shí): {}? URI: {}", new SimpleDateFormat("hh:mm:ss.SSS")

? ? ? ? ? ? ? ? ? ? .format(beginTime), request.getRequestURI());

? ? ? ? }

? ? ? ? return true;

? ? }

? ? @Override

? ? public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,

? ? ? ? ? ? ? ? ? ? ? ? ? ModelAndView modelAndView) {

? ? }

? ? @Override

? ? public void afterCompletion(HttpServletRequest request, HttpServletResponse response,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Object handler, Exception ex) {

? ? ? ? // 打印JVM信息。

? ? ? ? if (logger.isDebugEnabled()) {

? ? ? ? ? ? // 得到線程綁定的局部變量(開(kāi)始時(shí)間)

? ? ? ? ? ? long beginTime = startTimeThreadLocal.get();

? ? ? ? ? ? // 2、結(jié)束時(shí)間

? ? ? ? ? ? long endTime = System.currentTimeMillis();

? ? ? ? ? ? logger.debug("計(jì)時(shí)結(jié)束:{}? 耗時(shí):{}? URI: {}? 最大內(nèi)存: {}m? 已分配內(nèi)存: {}m? 已分配內(nèi)存中的剩余空間: {}m? 最大可用內(nèi)存: {}m",

? ? ? ? ? ? ? ? ? ? new SimpleDateFormat("hh:mm:ss.SSS").format(endTime), DateUtil.formatDateTime(endTime - beginTime),

? ? ? ? ? ? ? ? ? ? request.getRequestURI(), Runtime.getRuntime().maxMemory() / 1024 / 1024,

? ? ? ? ? ? ? ? ? ? Runtime.getRuntime().totalMemory() / 1024 / 1024, Runtime.getRuntime().freeMemory() / 1024 / 1024,

? ? ? ? ? ? ? ? ? ? (Runtime.getRuntime().maxMemory() - Runtime.getRuntime().totalMemory() + Runtime.getRuntime().freeMemory()) / 1024 / 1024);

? ? ? ? }

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 34,900評(píng)論 18 399
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,724評(píng)論 19 139
  • 1 android三種數(shù)據(jù)持久化存儲(chǔ)技術(shù) (1)文件存儲(chǔ):簡(jiǎn)單,不做格式化處理,適用于文本文件、二進(jìn)制文件 (2)...
    努力科研的小樹(shù)蛙閱讀 745評(píng)論 0 0
  • 月升,人獨(dú)坐。風(fēng)起,葉漂泊。嗟嘆紅塵誰(shuí)人知,荷塘一對(duì)鴛映過(guò)。昨日黃花皆已落,莫,莫,莫! 相見(jiàn),似無(wú)語(yǔ)。不見(jiàn),更落...
    和塵云閱讀 445評(píng)論 0 1
  • 還在上小學(xué)的時(shí)候,對(duì)工作場(chǎng)景的認(rèn)識(shí)就是,坐在空調(diào)室,面對(duì)電腦,一杯茶 ,一份報(bào),一把椅子坐一天,所以一直對(duì)工作的印...
    王玲_閱讀 258評(píng)論 0 1

友情鏈接更多精彩內(nèi)容