Ruby on rails 3 生产日志不工作

Ruby on rails 3 生产日志不工作,ruby-on-rails-3,logging,xmlhttprequest,Ruby On Rails 3,Logging,Xmlhttprequest,过去我以为我只是疯了。我可能是,但我的生产日志根本没有响应某些请求。我从移动客户端向rails应用程序发布图像,然后在web浏览器中获得刷新的视图。更改后的记录清晰可见。我的生产日志中没有显示上述内容,但一小时前记录了类似的请求。我没有更改任何配置文件。我还没有重新启动服务器。关于发生这种情况的原因有什么建议吗?检查设置的值 config.log_level = :warn 在你的 /rails_app/config/enviroments/production.rb 供参考 可用的日志级别

过去我以为我只是疯了。我可能是,但我的生产日志根本没有响应某些请求。我从移动客户端向rails应用程序发布图像,然后在web浏览器中获得刷新的视图。更改后的记录清晰可见。我的生产日志中没有显示上述内容,但一小时前记录了类似的请求。我没有更改任何配置文件。我还没有重新启动服务器。关于发生这种情况的原因有什么建议吗?

检查设置的值

config.log_level = :warn
在你的

/rails_app/config/enviroments/production.rb
供参考

可用的日志级别为::debug, :信息,:警告,:错误,:致命


因此,如果将级别设置为致命,则只会记录严重错误。如果将其设置为“调试”,几乎所有内容都将被记录。默认情况下,在生产环境中,它被设置为警告。这是有充分理由的。因为您不想让大量日志文件无缘无故堆积在生产服务器上。

内存不足是我能够想到的最可能的原因。如果我能证明的话,我会在这里发帖。

我通过

Rails.logger.instance_variable_get(:@logger).instance_variable_get(:@log_dest).sync = true if Rails.logger

在我的config/initializers/…

中,首先我将
config.log\u level=:debug
添加到
production.rb
文件中,然后我必须创建
production.log
文件(在日志文件夹中),然后使用
chmod
命令授予相应的权限。

我遇到了与生产日志相关的相同问题

要追溯web服务器的问题:

tail -f /var/log/apache2/error.log
来自应用程序的消息:权限被拒绝-/var/www/application-NAME/log/invitation.log(Errno::EACCES)

使用命令,您将获得日志权限

total 28
drwxr-sr-x  2 www-data www-data 4096 Sep 18 03:55 ./
drwxrwsr-x 14 www-data www-data 4096 Sep 24 23:52 ../
-rw-r--r--  1 root     www-data   71 Sep 18 03:55 agent_invitation.log
-rwxrwxrwx  1 root     www-data   71 Sep 18 03:55 email.log*
-rw-r--r--  1 root     www-data   71 Sep 18 03:55 invitation.log
-rw-r--r--  1 root     www-data   71 Sep 18 03:55 messages.log
-rw-r--r--  1 root     www-data   51 Sep 13 01:32 production.log
total 28
drwxr-sr-x  2 www-data www-data 4096 Sep 18 03:55 ./
drwxrwsr-x 14 www-data www-data 4096 Sep 24 23:52 ../
-rw-r--r--  1 www-data www-data   71 Sep 18 03:55 agent_invitation.log
-rwxrwxrwx  1 www-data www-data   71 Sep 18 03:55 email.log*
-rw-r--r--  1 www-data www-data   71 Sep 18 03:55 invitation.log
-rw-r--r--  1 www-data www-data   71 Sep 18 03:55 messages.log
-rw-r--r--  1 www-data www-data   51 Sep 13 01:32 production.log
解决方案: 必须将所有者从根用户更改为其他用户:

chown www-data:www-data ./ -R
现在使用
ll
查看权限

total 28
drwxr-sr-x  2 www-data www-data 4096 Sep 18 03:55 ./
drwxrwsr-x 14 www-data www-data 4096 Sep 24 23:52 ../
-rw-r--r--  1 root     www-data   71 Sep 18 03:55 agent_invitation.log
-rwxrwxrwx  1 root     www-data   71 Sep 18 03:55 email.log*
-rw-r--r--  1 root     www-data   71 Sep 18 03:55 invitation.log
-rw-r--r--  1 root     www-data   71 Sep 18 03:55 messages.log
-rw-r--r--  1 root     www-data   51 Sep 13 01:32 production.log
total 28
drwxr-sr-x  2 www-data www-data 4096 Sep 18 03:55 ./
drwxrwsr-x 14 www-data www-data 4096 Sep 24 23:52 ../
-rw-r--r--  1 www-data www-data   71 Sep 18 03:55 agent_invitation.log
-rwxrwxrwx  1 www-data www-data   71 Sep 18 03:55 email.log*
-rw-r--r--  1 www-data www-data   71 Sep 18 03:55 invitation.log
-rw-r--r--  1 www-data www-data   71 Sep 18 03:55 messages.log
-rw-r--r--  1 www-data www-data   51 Sep 13 01:32 production.log
重新启动web服务器:

sudo service apache2 restart

现在检查生产日志。

我也遇到了同样的问题。在这个网站上尝试了一切。 最后,我在控制台中检查了
Rails.logger
的值。它给出了以下输出

 #<RailsStdoutLogging::StdoutLogger:0x00007fe3b5bc3540
 @default_formatter=#<Logger::Formatter:0x00007fe3b5bc3658 @datetime_format=nil>,
 @formatter=#<ActiveSupport::Logger::SimpleFormatter:0x00007fe3b5bc34c8 @datetime_format=nil>,
 @level=0,
 @logdev=
  #<Logger::LogDevice:0x00007fe3b5bc3608
   @dev=#<IO:<STDOUT>>,
   @filename=nil,
   @mon_count=0,
   @mon_mutex=#<Thread::Mutex:0x00007fe3b5bc35b8>,
   @mon_mutex_owner_object_id=70307991657220,
   @mon_owner=nil,
   @shift_age=nil,
   @shift_period_suffix=nil,
   @shift_size=nil>,
 @progname=nil>
现在它开始登录production.log


编辑:我在
production.rb中也尝试过这样做,但不知道为什么总是被覆盖。所以我决定加入初始值设定项。我不知道它是否有任何性能问题。另外,我不知道它是如何自动变为
的。在我的例子中,我在
Gemfile
中有以下gem
rails\u 12factor
,用于生产

所以我不得不

  • 从我的文件中删除
    rails\u 12factor
  • gem卸载rails\u 12factor
  • bundle安装

  • 在下一次推动生产时,这些原木对我起了作用。仅供参考:我使用的是rails 5.2.1,但是rails web应用程序是在rails 3中启动的。

    config.consummed\u all\u requests\u local=true config.action\u controller.perform\u caching=false config.log\u level=:debug(五天前设置)中间是否可能有某种缓存层?这就是回答你客户的要求?你能验证rails应用程序是否真的得到了你想要它记录的请求吗?我不知道另一个缓存层是什么。我使用CloudFlare进行dns安全/缓存/分析,但它处于“开发模式”,只适用于静态文件。如果我的图像上传成功发布到rails应用程序,我不明白为什么它们不会被记录。仍然没有:我的本地环境在作为production运行时没有记录。为了彻底起见,production的默认日志级别是:info。对于开发和测试,它是:调试
    nil:NilClass(NoMethodError)的未定义方法“sync=”
    rails 4.1.2您把这个放在了什么文件中?@Carl config/initializers中任何以.rb结尾的文件。通常的做法是添加任意数量的文件。例如,你可以把它放在一个名为config/initializers/setup\u logger\u sync.rb的文件中,什么是合适的权限?@unclesol,我想是0644
    config/initializer/logger.rb 
    
    Rails.logger = ActiveSupport::Logger.new('log/production.log')