ruby on rails 3 -生产日志不工作



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

检查

config.log_level = :warn

/rails_app/config/enviroments/production.rb

供参考

可用的日志级别有::debug,:info,:warn,:error,:fatal.

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

在我的情况下,首先我将config.log_level = :debug添加到production.rb文件中,然后我必须创建production.log文件(在日志文件夹中),然后使用chmod命令给予适当的权限。

在我的例子中,我在我的Gemfile中有以下gem rails_12factor用于生产。

所以我必须

    从我的Gemfile中删除rails_12factor
  1. gem uninstall rails_12factor
  2. bundle install

在下一次推送到生产时,日志为我工作。仅供参考:我使用的是rails 5.2.1,但rails web应用程序在rails 3中启动。

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

我把

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

我也有同样的问题。这个网站上的所有东西都试过了。最后,我检查了控制台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>

然后我与其他一些rails项目交叉检查,得到以下输出

#<ActiveSupport::Logger:0x00005566367b77c0 @level=0, 
@progname=nil, 
@default_formatter=#<Logger::Formatter:0x00005566367b7950 @datetime_format=nil>, @formatter=#<Logger::Formatter:0x00005566367b7770 @datetime_format=nil>, 
@logdev=#<Logger::LogDevice:0x00005566367b7900 @shift_period_suffix=nil, @shift_size=nil, 
@shift_age=nil, @filename=nil,
@dev=#<File:/home/rajanverma/workspace/aarvy/log/production.log>, 
@mon_mutex=#<Thread::Mutex:0x00005566367b7888>, @mon_mutex_owner_object_id=46948744543360, 
@mon_owner=nil, @mon_count=0>> 

您可以清楚地看到两个项目使用不同的记录器来显示输出。我不想在STDOUT上输出日志,所以我通过创建初始化器文件将日志记录器更改为activessupport。

config/initializer/logger.rb 
Rails.logger = ActiveSupport::Logger.new('log/production.log')

现在它开始在production.log上记录日志。

编辑:我试着在production.rb做同样的事情,但不知道为什么它总是被覆盖。所以我决定放入初始化器。我不知道它是否有任何性能问题。另外,我不知道它是如何自动更改为#<RailsStdoutLogging::StdoutLogger:0x00007fe3b5bc3540的,因为在production.log上写入应该是默认行为。如果你有更好的理由,请告诉我。

我在生产日志中遇到了同样的问题。

跟踪web服务器的问题:

tail -f /var/log/apache2/error.log

来自应用程序的消息:Permission denied -/var/www/application - name/log/invite .log (Errno::EACCES)

cd /var/www/APPLICATION-NAME/log

使用命令all你将获得日志权限

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

解决方案:必须将所有者从root更改为其他用户:

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 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

现在检查生产日志

相关内容

  • 没有找到相关文章

最新更新