You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSO2 API Manager 3.1.0中Tomcat访问日志无法获取请求耗时问题求助

解决WSO2 APIM 3.1.0中Tomcat访问日志%T/%D格式符不生效的问题

我之前在WSO2 APIM 3.1.0里遇到过一模一样的问题!当时折腾了好一阵才找到原因和解决办法,分享给你:

问题根源

WSO2 APIM对Tomcat的访问日志配置做了一层封装处理,默认的access-log.properties文件中的%T/%D格式符会因为APIM的请求处理链路(比如网关拦截器、消息 mediation 流程)的特殊逻辑,导致无法正确捕获耗时参数,进而出现显示破折号或MIME类型的异常情况。

可行的解决/替代方案

方案1:使用APIM网关日志直接获取耗时(推荐)

APIM自身的网关日志已经内置了请求耗时的统计,不需要依赖Tomcat的访问日志,配置起来更简单可靠:

  • 打开<APIM_HOME>/repository/conf/log4j2.properties文件,找到logger.GATEWAY_LOG对应的appender配置
  • 在日志布局的pattern中添加%X{ELAPSED_TIME}字段,这是APIM在请求处理完成后自动记录的毫秒级耗时
  • 示例配置片段:
    appender.GATEWAY_LOG.layout.pattern = [%d{ISO8601}] %5p {%c} - API: %X{apiName} | Resource: %X{resourcePath} | Elapsed Time: %X{ELAPSED_TIME}ms | %m%n
    
  • 重启APIM后,网关日志(默认路径:<APIM_HOME>/repository/logs/gateway.log)中就能看到每条请求的具体耗时,还能关联到对应的API和资源路径,排查问题更方便。

方案2:直接修改Tomcat的AccessLogValve配置

如果你一定要用Tomcat访问日志来统计耗时,可以绕开APIM的access-log.properties,直接修改Tomcat的核心配置:

  • 打开<APIM_HOME>/repository/conf/tomcat/catalina-server.xml文件,找到AccessLogValve的配置块(如果没有可以新增)
  • 直接在pattern属性中加入%D(微秒级耗时)或%T(秒级耗时)格式符
  • 示例配置片段:
    <Valve className="org.apache.catalina.valves.AccessLogValve"
           directory="${carbon.home}/repository/logs"
           prefix="tomcat_access_"
           suffix=".log"
           pattern="%h %l %u %t &quot;%r&quot; %s %b %D" />
    
  • 修改完成后重启APIM,Tomcat会直接解析这些格式符,就能正确记录请求耗时了。

方案3:排查自定义组件的干扰

如果你的APIM环境中添加了自定义的请求拦截器、 mediation 脚本或扩展组件,可能会干扰Tomcat的耗时统计逻辑:

  • 暂时禁用所有自定义组件,重启APIM测试日志是否正常显示耗时
  • 如果恢复正常,再逐个启用组件排查,定位到具体的干扰项后调整其逻辑。

内容的提问来源于stack exchange,提问作者Kybernetes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:42:32