我在使用Sunspot Solr搜索Ruby on Rails方面有很棒的经验,然而,它的日志文件正在变得非常大,我似乎无法找到一种方法来旋转,覆盖,或关闭这些日志(除了我不想追求的非常黑客的方法)。
我在 config / 中有一个 sunspot.yml 文件,我尝试将 log_level 标记设置为 SEVERE 但是,这没有效果。
我尝试使用标准的 Logger.config 旋转方法,但这只是将开发日志输出发送到新创建的文件。
我非常感谢您提出的任何建议。
答案 0 :(得分:5)
在控制台中,这会关闭所有日志记录:
Sunspot::Rails::LogSubscriber.logger.level = 4
ActiveRecord::Base.logger.level = 4
Rails.logger.level = 4
My Gem版本:
答案 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