为什么 Rails 不写入 development.log

Why is Rails not writing to development.log

我的 Rails 4.2 应用程序突然没有向 development.log 写入任何内容。

绝对没有!

我已尝试检查正在使用的正确环境、重新启动服务器、检查可能与记录器交互的 gem、检查权限、logger.flushrake log:clean

日志文件现在完全是空的,没有任何内容被写入。

运行 rails s 给出:

=> Booting WEBrick
=> Rails 4.2.0 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
[2015-03-14 18:49:57] INFO  WEBrick 1.3.1
[2015-03-14 18:49:57] INFO  ruby 2.1.5 (2014-11-13) [x86_64-darwin14.0]
[2015-03-14 18:49:57] INFO  WEBrick::HTTPServer#start: pid=3963 port=3000

Whosebug 上有很多类似的问题,但 none 提供了一个对我的情况有效的答案。

我不知道是什么原因导致的,也不知道如何系统地调试。

我应该采取什么步骤?

我认为您的问题可能是由以下原因引起的:

  1. 您设置了高日志级别。检查您的 application.rbenvironments\*.rb 文件:

    # Set to :debug to see everything in the log.
    config.log_level = :error
    
  2. 您设置了自定义日志记录。检查您的 application.rbenvironments/*.rbinitializers/*.rb:

    中的所有文件
    # Use a different logger for distributed setups.
    config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
    

这两个步骤应该可以帮助您调查问题并解决问题。

好吧,兜兜转转,终于找到了罪魁祸首

rails_12factor 显然覆盖了 config.logger。

参见:https://github.com/heroku/rails_stdout_logging/blob/master/lib/rails_stdout_logging/rails3.rb#L7

我从开发环境中删除了这个 gem(我真的只在部署环境中需要它)现在一切正常。

要仅将 gem 投入生产,它需要在这样的 gem 环境组中:

# This is override development.log output and should only go in production.
group :production do
  gem 'rails_12factor'
end

感谢@maxd 帮助我朝着正确的方向思考。

如果在 AWS(或类似的)中,您必须确保您的日志目录具有写入权限。

将以下行添加到 config/environments/development.rb

config.log_level = :debug

重启服务器