2016-04-05 20 views
1

私のrails4アプリケーションがdockerで実行されています。 AWS SQSからメッセージを取得するためのレーキタスクを実行します。DockerがRakeタスクを実行しているRails4でログに記録

私が遭遇した問題は、のログにのログが表示されないことです。例外/エラーが発生するまで、コンソールには何も表示されません。言い換えれば、私のアプリケーションがうまくいけば、ログはコンソールに来ません。しかし、アプリケーションが間違っていたら、すべてのログ(情報、警告、エラー)が一緒に来ます!

config.logger = Logger.new(STDOUT) 
config.logger.level = Logger.const_get('INFO') 
config.log_level = :info 

私はGoogleのrakeタスクログ働いていませんでした '、何も役に立つ:

は、私はすでにコンフィグブローのように/ production.rbを設定します。これは、レールのログの問題やレーキタスクのログの問題、または多分ドッカーの問題ですか?

いくつかのアドバイスを得ることを望んでいます!レールについて

+0

rakeタスクが終了するまで、私は私が呼び出す任意のrakeタスクをSTDOUTに出力しない同様の問題を見ています。私はこれをrakeタスクの次のコードでテストしました: 'loop {puts" in loop ";スリープ2} '。タスクが実行されている間は、STDOUTには何も表示されませんが、完了するとすぐに "in loop"の両方のインスタンスがすぐに出力されます。私はなぜこれがあるのか​​分かっていないが、もし私がそれを理解するなら、私はここに投稿するだろう。 – alexpls

答えて

0

は、ログレベルは、ロガーレベルはでconfig.log_levelからロガーインスタンスに設定されている構成

# Enable stdout logger 
config.logger = Logger.new(STDOUT) 

# Set log level 
config.log_level = :ERROR 

ある4.xの: (https://github.com/rails/rails/blob/v4.2.4/railties/lib/rails/application/bootstrap.rb#L70

+0

ありがとう、男!しかし、私はこれが私の問題を解決するとは思わない。情報、警告、エラーを含むログは時間内に表示されません。例外が発生したときにのみコンソールに送られます。 –

+0

** ENVの設定** #デフォルト:ERROR config.log_level = ENV.fetch( "LOG_LEVEL"、 "ERROR") **シェルから実行テスト** #ログレベル:INFO(値は大文字でbootstrap.rbにあります) $ LOG_LEVEL = info rake test #ログレベル:ERROR $ LOG_LEVEL =デバッグレーキテスト – JohnPaul

3

STDOUTに出力バッファリングを無効にしてみてください。あなたのrakeタスクに次の行を追加することでこれを行うことができます。

$stdout.sync = true 
関連する問題