2016-11-10 4 views
0

Rails.loggerを使ってRailsにログインする方法を知っています。私の質問は、以前にRuby on Railsアプリケーションログで必要とされている宝石に外部化されたオブジェクトのメソッドを作成する方法で、何かを出力する必要があるときに標準のRailsログに表示されるようにする方法です?そのGemfileにRailsを必要とせずに何かできることはありますか?例えば、Railsアプリケーションの一部であるために使用されるオブジェクト・コードので、我々は以下を参照Rails.loggerにRuby Gemの "library"のログを表示する最もクリーンな方法はありますか?

if (val1 == val2) 
     ## the converted strings are the same, log the differences (something was misparsed) 
     ## for example, there can be mis-parsings between unit number and post-directionals 
     logger.warn "Curious Address Mismatch (1) :: #{first}" ##TODO: set these logging statements so that they log errors correctly when this method is called in a delayed job (which will be the case in Mintrak2) 
     logger.warn "Curious Address Mismatch (2) :: #{second}" 

     return true 
end 

Railsアプリケーションの一部であることが使用されるこのロガーなどが考えられるレールました。ロガー。これはもはや適用されない、と宝石がデバッグする必要がある場合、あなたはエラーを参照してください。

D, [2016-11-10T11:57:03.581467 #12602] DEBUG -- : Error importing FileSet: undefined local variable or method `logger' for AddressParser:Class 
D, [2016-11-10T11:57:03.581660 #12602] DEBUG -- : BT: /var/www/mintrak2/shared/bundle/ruby/2.1.0/bundler/gems/ehs-address-parser-lib-f390aacab26a/lib/tlc_address_parser.rb:649:in `compare_address_hashes' 

は、私はちょうどレールを必要とし、上に移動すべきか?レールなしで動作するライブラリのCLIフロントエンドがありますので、Railsの依存関係でライブラリを掘り下げたくありません。

ありがとうございます!

答えて

0

Railsがロードされていることを確認してから、ロガーへのパスを完全に修飾するか(つまりRails.logger.warn)、Railsアプリケーション内から設定できるプロパティを持つシングルトンを作成できます。次に、イニシャライザを使用して、Railsロガーへの参照を依存性に挿入することができます。

+0

2番目のオプションで少しわかりますか?これまでのところ、ライブラリは単一のクラスで構成されています。これが機能するには、すぐ隣に別のロガーシングルトンクラスを作成する必要がありますか? – jrkinnard

+0

既存のロガーシングルトンクラスをすでにお持ちの場合は、 'Logger'が' logger'属性を持つシングルトンであれば、文字通り 'JrKinnard :: SomeGem :: Logger.logger = Rails.logger'をイニシャライザで行うことができます。 –

関連する問題