【发布时间】:2014-08-15 04:14:42
【问题描述】:
我的 rails 应用程序中有几个记录器,它们在生产中被这样初始化:
log_file = File.open("#{Rails.root}/log/my_log_#{Rails.env}.log", 'a')
log_file.sync = !Rails.env.production?
LOG = Logger.new(log_file)
我使用上面的如下:
LOG << "my message\n"
请注意,log_file.sync 在生产中是错误的,因为我不想在记录的每条消息上都写入磁盘。我注意到的问题是,当我停止我的 rails apache 服务器 (sudo /etc/init.d/httpd stop) 时,我的 LOG 没有被刷新。结果,我丢失了消息。这是预期的行为吗?
奇怪的是,我通过使用 rails 控制台(生产)将一堆日志消息写入上述LOG 进行了故障排除。当我关闭 rails 控制台时,我的 LOG 按预期刷新。所以这让我相信我在Passenger中关闭我的rails实例的方式有问题。
那么LOG 怎么会在 Rails 控制台中正确刷新,但在实际的乘客服务器中却没有呢?我错过了什么?
我正在运行 Rails 3.2.8 并使用 Apache w/Passenger 3.0.17。
谢谢!
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 logging passenger