如何旋转,覆盖或关闭Sunspot Solr Rubygem的日志记录?

时间:2011-02-12 03:43:41

标签: ruby-on-rails solr logging sunspot

我在使用Sunspot Solr搜索Ruby on Rails方面有很棒的经验,然而,它的日志文件正在变得非常大,我似乎无法找到一种方法来旋转覆盖,或关闭这些日志(除了我不想追求的非常黑客的方法)。

我在 config / 中有一个 sunspot.yml 文件,我尝试将 log_level 标记设置为 SEVERE

我尝试使用标准的 Logger.config 旋转方法,但这只是将开发日志输出发送到新创建的文件。

我非常感谢您提出的任何建议。

5 个答案:

答案 0 :(得分:5)

在控制台中,这会关闭所有日志记录:

Sunspot::Rails::LogSubscriber.logger.level = 4
ActiveRecord::Base.logger.level = 4
Rails.logger.level = 4

My Gem版本:

  • sunspot(2.0.0.pre.130115)
  • sunspot_rails(2.0.0.pre.130115)
  • sunspot_solr(2.0.0.pre.130115)

答案 1 :(得分:4)

有点晚了,但看起来这个现在在config / sunspot.yml中处理:

production:
  solr:
    hostname: thorn
    port: 8983
    log_level: WARNING
    min_memory: 512M
    max_memory: 1G
    solr_home: /u/solr

答案 2 :(得分:1)

您正在寻找Solr logging.properties文件来自定义Java容器的日志记录行为。 Sunspot使用Jetty作为其嵌入式Solr实例。 Solr wiki提供了在Jetty中自定义logging.properties的说明 http://wiki.apache.org/solr/LoggingInDefaultJettySetup

您可能需要查看太阳黑子的rake任务的源代码,以确定注入自己的logging.properties的最佳位置。我想这将是一个有趣的问题,可以在Sunspot mailing list上提出一个潜在的太阳黑子补丁。

答案 3 :(得分:1)

目前无法正确处理log_level。 The fix is on Github,这是2.x版本。

您可以等待下一个gem发布。如果你不这样做并且不害怕风险,你可以在Gemfile中使用以下内容:

# use selectively
gem 'sunspot_rails', :git => "git://github.com/sunspot/sunspot.git", :require =>  "sunspot_rails"
gem 'sunspot_solr', :git => "git://github.com/sunspot/sunspot.git", :require => "sunspot_solr"

我使用Linux logrotate:

/home/path/log/*.log {
  su username pwd
  daily
  missingok
  rotate 7
  delaycompress
  notifempty
  copytruncate
}

答案 4 :(得分:0)

我已经修补了sunspot_solr中的相应文件来解决这个问题。

这段代码不够强大,不能直接在sunspot_solr gem中完成重新构建/重构,所以我建议将sunspot_solr gem版本锁定到1.3.0,以便成功。

您可以将以下内容放入项目中。我们在Rails项目中使用它并将它放在lib / sunspot / solr / server.rb中:

module Sunspot
  module Solr
    class Server #:nodoc:

      def logging_config_path
        puts "# ==> Using monkey-patched Sunspot::Solr::Server#logging_config_path method"

        return @logging_config_path if defined?(@logging_config_path)
        @logging_config_path =
        if log_file
            logging_config = Tempfile.new('logging.properties')
            logging_config.puts("handlers = java.util.logging.FileHandler")
            logging_config.puts("java.util.logging.FileHandler.level = #{log_level.to_s.upcase}")
            logging_config.puts("java.util.logging.FileHandler.pattern = #{log_file}")
            logging_config.puts("java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter")

            # >>> ADDED THE FOLLOWING TWO LINES FOR JAVA-BASED LOG ROTATION <<<
            logging_config.puts("java.util.logging.FileHandler.count = 7")
            logging_config.puts("java.util.logging.FileHandler.limit = 104857600") # 100 megs

            logging_config.flush
            logging_config.close
            logging_config.path
          end
        end


      end # class Server
    end # module Solr
  end # module Sunspot