【问题标题】:Production log not working生产日志不起作用
【发布时间】:2011-05-04 03:55:19
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails-3 logging xmlhttprequest


    【解决方案1】:

    检查设置的值

    config.log_level = :warn
    

    在你的

    /rails_app/config/enviroments/production.rb
    

    仅供参考

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

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

    【讨论】:

    • config.consider_all_requests_local = true config.action_controller.perform_caching = false config.log_level = :debug(五天前设置)
    • 中间是否有某种缓存层?那就是回答您客户的要求?您能否验证 rails 应用程序确实收到了您希望它记录的请求?
    • 我不知道另一个缓存层会是什么。我将 CloudFlare 用于 dns 安全/缓存/分析,但它处于“开发模式”,无论如何仅适用于静态文件。如果我的图片上传成功发布到 rails 应用程序,我不明白为什么它们不会被记录。
    • 仍然没有:我的本地环境在作为生产运行时没有记录
    • 为了彻底,生产的默认 log_level 是 :info。对于开发和测试,它是 :debug。 guides.rubyonrails.org/v3.2.12/…
    【解决方案2】:

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

    【讨论】:

    • 什么是适当的权限?
    • @unclesol,我认为是 0644
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我把问题解决了

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

      进入我的配置/初始化程序/...

      【讨论】:

      • undefined method 'sync=' for nil:NilClass (NoMethodError) rails 4.1.2
      • 你把这个放在什么文件里了?
      • @Carl config/initializers 中任何以 .rb 结尾的文件。通常的做法是在其中添加任意数量的文件。例如,您可以将其放在名为 config/initializers/setup_logger_sync.rb 的文件中
      【解决方案5】:

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

      所以我不得不

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

      在下一次投入生产时,这些日志对我有用。仅供参考:我使用的是 rails 5.2.1,但 rails web 应用程序是在 rails 3 中启动的。

      【讨论】:

        【解决方案6】:

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

        要追溯网络服务器的问题:

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

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

        cd /var/www/APPLICATION-NAME/log
        

        使用命令 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
        

        现在检查生产日志。

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题。尝试了该网站上的所有内容。 最后我在控制台中检查了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 中做同样的事情,但不知道为什么它总是被覆盖。所以我决定放入初始化程序。我不知道天气它有任何性能问题。此外,我不知道它是如何自动更改为 #&lt;RailsStdoutLogging::StdoutLogger:0x00007fe3b5bc3540 的,因为在 production.log 上写入应该是默认行为。如果您知道更好的理由,请告诉我。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-01-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-03
            • 2021-07-19
            • 2012-12-10
            • 2020-02-27
            相关资源
            最近更新 更多