过去我以为我只是疯了。我可能是,但我的生产日志根本没有响应某些请求。我正在从移动客户端将图像发布到我的rails应用程序,然后在Web浏览器中获取刷新的视图。改变后的记录清晰可见。以上都没有出现在我的生产日志中,但是一小时前就记录了类似的请求。我没有更改任何配置文件。我没有重新启动我的服务器。有关为何发生这种情况的任何建议吗?
答案 0 :(得分:11)
检查设置为
的值config.log_level = :warn
中的
/rails_app/config/enviroments/production.rb
FYI
可用的日志级别是:: debug, :info,:warn,:error,:致命。
因此,如果将级别设置为致命级别,则只会记录严重错误。如果将其设置为调试,几乎所有内容都将被记录。默认情况下,它在生产中设置为警告。这是有充分理由的。因为您不希望无缘无故地将大量日志文件堆积在生产服务器上。
答案 1 :(得分:6)
在我的情况下,首先我将config.log_level = :debug
添加到production.rb
文件,然后我必须创建production.log
文件(在日志文件夹中),然后使用chmod
提供适当的权限命令。
答案 2 :(得分:2)
低内存是我能够想出的最可能的原因。如果我可以证明的话,我会在这里发帖。
答案 3 :(得分:2)
我通过
解决了问题Rails.logger.instance_variable_get(:@logger).instance_variable_get(:@log_dest).sync = true if Rails.logger
进入我的config / initializers /...
答案 4 :(得分:1)
就我而言,我的 rails_12factor
中有以下 gem Gemfile
用于生产。
所以我不得不
rails_12factor
gem uninstall rails_12factor
bundle install
在下一次推送到生产时,日志对我有用。仅供参考:我使用的是 rails 5.2.1,但 rails web 应用程序是在 rails 3 中启动的。
答案 5 :(得分:0)
我遇到了与生产日志相关的问题。
追溯网络服务器的问题:
tail -f /var/log/apache2/error.log
来自应用程序的消息:权限被拒绝 - /var/www/APPLICATION-NAME/log/invitation.log(Errno :: EACCES)
cd /var/www/APPLICATION-NAME/log
使用comman 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
<强>解决方案:强> 必须将所有者从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
重启您的网络服务器:
sudo service apache2 restart
现在检查生产日志。
答案 6 :(得分:0)
我遇到了同样的问题。尝试了该网站上的所有内容。
最后,我在控制台中检查了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上输出日志,因此我通过创建初始化程序文件将记录器更改为ActiveSupport。
config/initializer/logger.rb
Rails.logger = ActiveSupport::Logger.new('log/production.log')
现在,它开始登录production.log。
编辑:我尝试在production.rb
中做同样的事情,但是不知道为什么它总是被覆盖。因此,我决定放入初始化程序。我不知道天气有任何性能问题。另外,我也不知道它是如何自动更改为#<RailsStdoutLogging::StdoutLogger:0x00007fe3b5bc3540
的,因为在production.log上写应该是默认行为。如果您知道更好的原因,请告诉我。