温馨提示×

Ubuntu Tomcat慢日志怎么开

小樊
43
2026-07-10 10:12:57
栏目: 智能运维

Ubuntu + Apache Tomcat 上开启“慢日志”,通常是指 记录处理时间过长的请求。Tomcat 本身没有像 Nginx 那样的 slowlog,但可以通过 AccessLogValve + 条件判断日志分析 来实现。下面给你几种常用且可落地的方法


一、使用 AccessLogValve + 条件记录(最常用 ✅)

Tomcat 的 AccessLogValve 支持在 access log 中记录请求耗时,然后你可以通过 过滤时间阈值 得到“慢请求日志”。

1️⃣ 修改 Tomcat server.xml

编辑:

sudo vim /opt/tomcat/conf/server.xml

(路径可能是 /etc/tomcat9/server.xml/usr/local/tomcat/conf/server.xml

<Host> 中添加或修改:

<Valve className="org.apache.catalina.valves.AccessLogValve"
       directory="logs"
       prefix="localhost_access_log"
       suffix=".txt"
       pattern="%h %l %u %t "%r" %s %b %D" />

2️⃣ 关键参数说明

参数 说明
%D 请求耗时(毫秒)
%T 秒(浮点)
%r 请求 URL
%s HTTP 状态码
%b 响应字节数

示例日志:

127.0.0.1 - - [10/Oct/2024:11:22:33 +0800] "GET /api/test HTTP/1.1" 200 1234 2150

表示请求耗时 2150ms


3️⃣ 筛选慢请求(例如 > 2 秒)

awk '$NF > 2000' /opt/tomcat/logs/localhost_access_log.*.txt

或实时查看:

tail -f /opt/tomcat/logs/localhost_access_log.*.txt | awk '$NF > 2000'

这是最简单、最稳定、生产可用方案


二、使用 RequestDumperValve(调试用 ⚠️)

不推荐生产环境,性能影响大

<Valve className="org.apache.catalina.valves.RequestDumperValve" />

日志会输出到 catalina.out,不适合只分析慢请求。


三、使用 Tomcat + Nginx(推荐架构 ✅✅)

如果你前面有 Nginx

Nginx 慢日志

http {
    log_format main '$remote_addr - $request_time - $request';

    access_log /var/log/nginx/access.log main;
}

筛选:

awk '$3 > 2' /var/log/nginx/access.log

四、应用层慢日志(代码级 ✅)

1️⃣ Spring Boot 示例

long start = System.currentTimeMillis();
// 处理请求
long cost = System.currentTimeMillis() - start;
if (cost > 2000) {
    log.warn("slow request: {} ms", cost);
}

2️⃣ 使用 Filter(通用)

long start = System.currentTimeMillis();
chain.doFilter(request, response);
long cost = System.currentTimeMillis() - start;
if (cost > 2000) {
    log.warn("slow request cost {} ms", cost);
}

五、推荐方案总结 ✅

场景 推荐方案
只想看慢请求 AccessLogValve + %D
前端有 Nginx Nginx request_time
需要定位业务慢点 应用 Filter / AOP
生产环境 AccessLogValve ✅

六、示例:完整最小配置(Ubuntu + Tomcat 9)

<Host name="localhost" appBase="webapps">
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="logs"
           prefix="access_log"
           suffix=".txt"
           pattern="%h %l %u %t "%r" %s %b %D" />
</Host>

查看慢请求:

awk '$NF > 1000' /var/lib/tomcat9/logs/access_log.*.txt

如果你愿意,可以告诉我:

  • Tomcat 版本(8 / 9 / 10)
  • 是否使用 Spring Boot
  • 是否有 Nginx

我可以给你 完全贴合你环境的配置

0