s_tajima:TechBlog

渋谷で働くインフラエンジニアのTechブログです。

right_awsのデバッグログ出力を制御する方法

最近、AWSのRuby用コンソールツールの一つであるright_awsを使っているのですが、
スクリプトを実行した時に、

I, [2012-06-23T17:55:15.996727 #25742]  INFO -- : New RightAws::AcwInterface using shared connections mode
I, [2012-06-23T17:55:15.997220 #25742]  INFO -- : Opening new HTTPS connection to monitoring.ap-northeast-1.amazonaws.com:443

のようなデバッグログがいちいち出力されるのが邪魔だなあと思ったので消そうと思いました。

しかし、right_awsはまともなドキュメントがないためやり方がわからず...
なのでライブラリ本体のコードを読んで、デバッグログ制御の方法を調べてみました。


コードを追っていくと、ログ出力に関係のありそうなのが、

  • right_aws-3.0.4/lib/awsbase/right_awsbase.rb 314行 ~ 318行
      @logger = @params[:logger]
      @logger = ::Rails.logger       if !@logger && defined?(::Rails) && ::Rails.respond_to?(:logger)
      @logger = RAILS_DEFAULT_LOGGER if !@logger && defined?(RAILS_DEFAULT_LOGGER)
      @logger = Logger.new(STDOUT)   if !@logger
      @logger.info "New #{self.class.name} using #{@params[:connections]} connections mode"

つまり@params[:logger]に任意のloggerオブジェクトを渡せばいいと。

こんな感じのコードを

  • before
Acw = Rightscale::AcwInterface.new(access_key, access_secret)

こんなふうに書き換えたらログレベルを制御できるようになりました。

  • after
logger = Logger.new(STDOUT)
logger.level = Logger::WARN
Acw = Rightscale::AcwInterface.new(access_key, access_secret, {:logger => logger})