如何从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