2016-06-14 9 views
0

ログレベルの管理に関する情報はほとんどないので、私はこの質問にあなたの意見を聞くことにしました。プロダクションサーバでリクエストごとにRailsログレベルを変更する

この質問の背後にある動機は、アプリケーションサーバーを再起動せずに、プロダクションのログレベルを設定する最適な方法を見つけることです。

私が考えることができる最初の事は、application_controllerのURLパラメータの存在を確認するメソッドを入れていることです。つまり、要求の有効期間中存在する場合は、そのログレベルを変更します。

これには1つの欠点があります。これは、ユーザーまたはログを有効にするためにURLを変更する必要があることです。もう1つの基本的な呼び出しは、javascriptを使用してapiに呼び出すと、この変更を認識してからlog_level url paramに渡す必要があります。

もう1つのことは、Railsのルートディレクトリにdebug_log_levelという名前のファイルを置くことです。次に、各要求に対して、そのファイルが存在するかどうかを確認します。それが実行されると、実際に有効なログレベルを含むファイル名とそのログレベルを有効にするときのチェックが行われます。

この問題の欠点は、異なるボックスに複数のインスタンスが存在する可能性があることです。この変更を行うには、各ボックスに移動する必要があります。

もう1つは、データベースの呼び出しと、ファイルの場合と同じフローです。

また、ログレベルの環境変数を設定し、それを使ってログレベルを設定することもできますが、これにはアプリケーションサーバーの再起動が必要です。

プロダクション環境でどのように管理していますか?今はこれを行うよりスマートな方法が必要です。

+0

を使用することができますがそれほど重要なのでしょうか。各ボックスに設定する必要のあるデータベースや環境変数の代わりに、Redisまたはすべてのアプリからアクセスできる他のキー/値ストレージを使用することもできます。 – Leito

+0

このような設定をトグルすると問題が発生する可能性があります。これらは個々のリクエストのコンテキストから漏れてすべてに影響する可能性があります。より冗長な別の環境を作成し、テストに使用することもできます。 – tadman

+0

@tadman私はファイルが存在するかぎり、デバッグを続けています。複数のリクエストにリークする以外の潜在的な短所はありますか? –

答えて

0

documentationによると、次のように(例えばconfig/environments/production.rbで)環境の初期化子でログレベルを設定することができます。

config.log_level = :warn 

ご希望のログレベルを指定する場所の代わりに:warnの。

使用可能なログレベルは:debug、:info、:warn、:error、:fatal、およびunknownです。ログレベルの数値はそれぞれ0から5までです。

実行時にログレベルを指定する必要がある場合は、アプリケーションサーバーを再起動しないのはなぜ、あなたは

Rails.logger.level = 0 
関連する問題