Ruby on rails 3 生产日志不工作
过去我以为我只是疯了。我可能是,但我的生产日志根本没有响应某些请求。我从移动客户端向rails应用程序发布图像,然后在web浏览器中获得刷新的视图。更改后的记录清晰可见。我的生产日志中没有显示上述内容,但一小时前记录了类似的请求。我没有更改任何配置文件。我还没有重新启动服务器。关于发生这种情况的原因有什么建议吗?检查设置的值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 供参考 可用的日志级别
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
中有以下gemrails\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')