Ruby 3、Rails 6环境下如何配置Puma实现栈跟踪倒序打印
栈跟踪倒序配置方案
完全可以实现需求,不需要修改Puma配置,仅需调整Rails的异常日志打印逻辑即可,操作步骤如下:
操作步骤
1. 新增初始化文件
在Rails项目的config/initializers/目录下新建名为reverse_backtrace.rb的配置文件,写入以下代码:
# 仅开发环境开启,生产环境按需调整判断条件 if Rails.env.development? module ActionDispatch class DebugExceptions alias_method :original_log_error, :log_error def log_error(request, wrapper) exception = wrapper.exception return unless logger # 优先取应用层栈跟踪,为空则取框架层栈 trace = wrapper.application_trace trace = wrapper.framework_trace if trace.empty? # 打印核心错误信息 logger.fatal "\n#{exception.class} (#{exception.message}):" # 倒序打印栈跟踪 trace.reverse.each { |line| logger.fatal " #{line}" } logger.fatal "" end end end end
2. 重启服务
配置添加完成后重启Puma服务即可生效,后续报错的核心错误信息、业务代码出错行都会展示在栈跟踪的最底部,无需向上滚动查找。
可选调整项
- 若需要把gem、框架层面的全量栈跟踪也倒序展示,将代码中的
wrapper.application_trace替换为wrapper.full_trace即可 - 若需要在生产环境开启该特性,移除第一行的
if Rails.env.development?判断即可,开启前请确认不会影响现有生产日志的采集、解析规则。
内容的提问来源于stack exchange,提问作者Robin
相关产品推荐
相关产品推荐

