Debug Mode

基本调试模式

设置 conf/debug.yaml 即可开启基本调试模式:

  1. basic:
  2. enable: true

注意:在 APISIX 2.10 之前,开启基本调试模式曾经是设置 conf/config.yaml 中的 apisix.enable_debugtrue

比如对 /hello 开启了 limit-connlimit-count 插件,这时候应答头中会有 Apisix-Plugins: limit-conn, limit-count

  1. $ curl http://127.0.0.1:1984/hello -i
  2. HTTP/1.1 200 OK
  3. Content-Type: text/plain
  4. Transfer-Encoding: chunked
  5. Connection: keep-alive
  6. Apisix-Plugins: limit-conn, limit-count
  7. X-RateLimit-Limit: 2
  8. X-RateLimit-Remaining: 1
  9. Server: openresty
  10. hello world

如果这个信息无法通过 HTTP 应答头传递,比如插件在 stream 子系统里面执行, 那么这个信息会以 warn 等级日志写入到错误日志中。

高级调试模式

设置 conf/debug.yaml 中的选项,开启高级调试模式。由于 APISIX 服务启动后是每秒定期检查该文件, 当可以正常读取到 #END 结尾时,才认为文件处于写完关闭状态。

根据文件最后修改时间判断文件内容是否有变化,如有变化则重新加载,如没变化则跳过本次检查。 所以高级调试模式的开启、关闭都是热更新方式完成。

名字可选项说明默认值
hook_conf.enable必选项是否开启 hook 追踪调试。开启后将打印指定模块方法的请求参数或返回值false
hook_conf.name必选项开启 hook 追踪调试的模块列表名称
hook_conf.log_level必选项打印请求参数和返回值的日志级别warn
hook_conf.is_print_input_args必选项是否打印输入参数true
hook_conf.is_print_return_value必选项是否打印返回值true

请看下面示例:

  1. hook_conf:
  2. enable: false # 是否开启 hook 追踪调试
  3. name: hook_phase # 开启 hook 追踪调试的模块列表名称
  4. log_level: warn # 日志级别
  5. is_print_input_args: true # 是否打印输入参数
  6. is_print_return_value: true # 是否打印返回值
  7. hook_phase: # 模块函数列表,名字:hook_phase
  8. apisix: # 引用的模块名称
  9. - http_access_phase # 函数名:数组
  10. - http_header_filter_phase
  11. - http_body_filter_phase
  12. - http_log_phase
  13. #END

动态高级调试模式

动态高级调试模式是基于高级调试模式,可以由单个请求动态开启高级调试模式。设置 conf/debug.yaml 中的选项。

示例:

  1. http_filter:
  2. enable: true # 是否动态开启高级调试模式
  3. enable_header_name: X-APISIX-Dynamic-Debug # 追踪携带此 header 的请求
  4. ......
  5. #END

动态开启高级调试模式,示例:

  1. curl 127.0.0.1:9090/hello --header 'X-APISIX-Dynamic-Debug: foo'

注意:动态高级调试模式无法调试 apisix.http_access_phase, 模块(因为请求进入 apisix.http_access_phase 模块后,才会判断是否动态开启高级调试模式)。