过去我以为我疯了。可能是,但是我的生产日志根本没有响应某些请求。我从移动客户端发布图像到我的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中删除
-
gem uninstall rails_12factor
-
bundle install
rails_12factor
在下一次推送到生产时,日志为我工作。仅供参考:我使用的是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
现在检查生产日志