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

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

我在config /中有一个文件sunspot.yml ,我尝试将log_level标志设置为SEVERE ,但这没有任何效果。

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

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

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

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

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

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

我的gem版本:

  • 太阳黑子(2.0.0.pre.130115)
  • sunspot_rails(2.0.0.pre.130115)
  • sunspot_solr(2.0.0.pre.130115)

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

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

目前无法正确处理log_level。 修复程序在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 } 

我已经修补了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