溫馨提示×

Tomcat日志中如何查看請求處理時間

小樊
48
2025-09-30 09:28:57
欄目: 智能運維

Tomcat日志中查看請求處理時間的方法

1. 配置AccessLogValve記錄處理時間(核心方法)

Tomcat通過AccessLogValve組件記錄訪問日志,可通過修改其pattern屬性添加處理時間字段。常見配置位置為conf/server.xml(全局配置)或conf/context.xml(應用級配置)。

  • 關鍵配置項:在<Valve>標簽的pattern屬性中添加以下占位符:
    • %D:處理請求的時間,單位為毫秒(推薦,精度更高);
    • %T:處理請求的時間,單位為(適用于粗略統計);
    • %{request_time}e:部分版本中也可使用此格式(需確認Tomcat版本支持)。
  • 示例配置
    <Valve className="org.apache.catalina.valves.AccessLogValve" 
           directory="logs" 
           prefix="localhost_access_log." 
           suffix=".txt" 
           pattern="%h %l %u %t "%r" %s %b %D %T" 
           resolveHosts="false"/>
    
    上述配置會生成類似如下的日志條目:
    192.168.1.100 - - [10/Oct/2025:14:30:00 +0800] "GET /api/test HTTP/1.1" 200 1024 156 0.156
    其中156(%D)表示處理時間為156毫秒,0.156(%T)表示處理時間為0.156秒。

2. 使用日志分析工具提取處理時間

配置完成后,需通過工具分析日志中的處理時間字段(如%D%T對應的數值):

  • 實時查看日志:使用tail -f命令實時監控訪問日志,例如:
    tail -f ${TOMCAT_HOME}/logs/localhost_access_log.2025-10-10.txt
    
  • 提取處理時間:用awk命令提取%D(第9列,以空格分隔)或%T(第10列)字段,例如:
    awk '{print $9}' localhost_access_log.2025-10-10.txt | sort -n | uniq -c  # 統計各處理時間的請求數
    awk '$9 > 1000' localhost_access_log.2025-10-10.txt  # 篩選處理時間超過1秒的請求
    
  • 高級分析:使用ELK Stack(Elasticsearch+Logstash+Kibana)、Splunk等工具,將日志導入后通過可視化 dashboard 展示處理時間的分布(如平均值、P90、P99)、趨勢圖等,便于快速定位慢請求。

3. 應用層記錄處理時間(補充方案)

若需更細粒度的控制(如記錄特定請求的處理時間),可在應用中通過過濾器(Filter)或攔截器(Interceptor)記錄開始和結束時間:

  • Servlet Filter示例
    @WebFilter("/*")
    public class RequestTimeFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
                throws IOException, ServletException {
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            long startTime = System.currentTimeMillis();
            chain.doFilter(request, response); // 執行后續請求處理
            long endTime = System.currentTimeMillis();
            long processingTime = endTime - startTime;
            System.out.printf("Request URL: %s, Processing Time: %d ms%n", 
                             httpRequest.getRequestURL(), processingTime);
            // 可將日志輸出到應用日志文件(如Log4j、SLF4J)
        }
    }
    
    此方案可記錄每個請求的詳細處理時間,但需修改應用代碼,適用于需要定制化日志的場景。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女