2016-09-13 10 views
10

Rails 4アプリに構造化ログを追加しています。 this articleに記載されているようにlogragelogstash-loggerを使用すると、私は物事がほとんど働いています。Rails 4と構造化ロギングでは、リクエストIDフィールドをどのようにログに追加できますか?

ログにリクエストIDを追加できません。私が見つけた最も近いconfig/${ENV}.rbにこれを追加することです:

config.log_tags = [:uuid] 

しかし、これではなく、名前のフィールドとして、それを追加することで、タグリストに要求IDを追加します。

{ 
    "tags": [ 
    "da76b4be-01ae-4cc4-8d3c-87062ea02cfe" 
    ], 
    "host": "services", 
    "severity": "DEBUG", 
    "@version": "1", 
    "@timestamp": "2016-09-13T17:24:34.883+00:00", 
    "message": "..." 
} 

これは問題です。これは、特定のリクエストIDを検索する方法がより扱いにくく、あまり明白ではありません。さらに、logstashでメッセージを解析すると、すでにログメッセージに関連付けられている他のタグが上書きされます。

リクエストIDを名前付きフィールドとしてログに追加する方法はありますか。

{ 
    "request_id", "da76b4be-01ae-4cc4-8d3c-87062ea02cfe", 
    "host": "services", 
    "severity": "DEBUG", 
    "@version": "1", 
    "@timestamp": "2016-09-13T17:24:34.883+00:00", 
    "message": "..." 
} 

答えて

1

これを行うにはいくつかの方法があります。 Logrageからは、あなたがcustom_optionsを使用することができます。

# all your lograge stuff... 
    config.lograge.enabled = true 

    config.lograge.custom_options = lambda do |event| 
    # use the `event.payload` 
    {uuid: event.payload[:uuid]} 
    end 

あなたはここで任意のオプションをオーバーロードすることができます - 彼らはLIBのものを引き継ぐでしょう。

これに責任を負うコードはhereです。それが動作することを示すテストはhereです。

+0

私はこれを試しましたが、 'payload'ハッシュにはuuidフィールドがありません。私は '' uuid ':null'をログに記録します。 – leedm777

+0

これを動作させるには、 'ApplicationController'で定義された' append_info_to_payload'が必要であることがわかりました(https://github.com/roidrage/lograge/blob/master/README.mdを参照)。しかし、これはカスタムフィールドをアクセスログに追加するだけです。 UUIDを有効にするには、その要求に関連するすべてのログに(UUIDがすべてのログエントリにタグを置くのと同じ方法で)必要があります。 – leedm777

関連する問題