如何查看在生产环境中运行的 Rails 7.1.3 应用程序的堆栈跟踪? 我习惯于跟踪 production.log 文件,但是该文件已不再存在 在参考This answer加上rails文档的各种链接之后,描述了各种解决方案,但是它们都是有缺陷的,并导致堆栈跟踪被推送到生产.log文件,但所有解决方案都会阻止渲染任何页面内容并导致空白屏幕,删除日志记录功能,我就可以渲染内容了。
我尝试过的选项包括向环境 production.rb 添加各种日志记录代码
新 Rails 应用程序自动生成的代码具有以下几行
# Log to STDOUT by default
config.logger = ActiveSupport::Logger.new(STDOUT)
.tap { |logger| logger.formatter = ::Logger::Formatter.new }
.then { |logger| ActiveSupport::TaggedLogging.new(logger) }
摘自这里
broadcast = BroadcastLogger.new(stdout_logger, stderr_logger, file_logger)
从上面链接的已接受答案中进行的另一次尝试是这样的
config.logger = ActiveSupport::BroadcastLogger.new(
ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new($stdout, formatter: Logger::Formatter.new)),
ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new("log/production.log", formatter: Logger::Formatter.new))
)
我认为文件日志记录被默认删除是有原因的,现在必须有一种替代的首选方法来调试生产应用程序?
尽管日志跟踪显示操作成功,但除原始代码之外的所有尝试都不会显示任何内容。
我需要调试一个无法找到tinymce javascript 资源的特定页面,这很可能取决于路由。由于无法查看堆栈跟踪,我陷入了困境。
最好弄清楚如何在生产中查看日志。
systemd
设置示例:
$ systemctl list-units | grep rails
rails-app.service loaded active running StackoverflowApp
可以使用
journalctl
查看日志:
$ journalctl -f -u rails-app.service
您还可以尝试跟踪系统日志:
$ tail -f /var/log/syslog
BroadcastLogger
仍然损坏,但似乎无需标记日志即可工作:
config.logger = ActiveSupport::BroadcastLogger.new(
ActiveSupport::Logger.new($stdout, formatter: Logger::Formatter.new),
ActiveSupport::Logger.new("log/production.log", formatter: Logger::Formatter.new)
)