2016-09-13 5 views
10

मैं एक रेल 4 ऐप में संरचित लॉगिंग जोड़ रहा हूं। और logstash-logger का उपयोग this article में वर्णित है, मेरे पास ज्यादातर चीजें काम कर रही हैं।रेल 4 और संरचित लॉगिंग के साथ, मैं लॉग आईडी के लिए अनुरोध आईडी फ़ील्ड कैसे जोड़ सकता हूं?

मुझे लॉग में अनुरोध आईडी जोड़ने में समस्या हो रही है। निकटतम मैंने पाया config/${ENV}.rb में जोड़ने के लिए है:

config.log_tags = [:uuid] 

लेकिन इस टैग सूची में अनुरोध आईडी कहते हैं, बजाय एक नामित क्षेत्र के रूप में जोड़ने की।

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

यह समस्याग्रस्त है। यह किसी विशेष अनुरोध आईडी को खोजने के तरीके पर अधिक अजीब और कम स्पष्ट बनाता है। इसके अलावा, लॉगस्टैश में संदेश को पार्स करना यह किसी अन्य टैग को ओवरराइट करता है जो लॉग संदेश से पहले से जुड़े हुए हैं।

क्या कोई तरीका है कि मैं नाम आईडी के रूप में लॉग में अनुरोध आईडी जोड़ सकता हूं?

{ 
    "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

मैंने कोशिश की, लेकिन 'पेलोड' हैश का कोई यूयूआईडी क्षेत्र नहीं है। मुझे केवल अपने लॉग में 'uuid "मिलता है: null'। – leedm777

+0

मैंने पाया कि आपको काम करने के लिए 'एप्लिकेशन कंट्रोलर' में परिभाषित 'append_info_to_payload'' की आवश्यकता है (https://github.com/roidrage/lograge/blob/master/README.md देखें)। लेकिन यह केवल एक्सेस लॉग में कस्टम फ़ील्ड जोड़ता है। यूयूआईडी उपयोगी होने के लिए, इसे उस अनुरोध से जुड़े सभी लॉगों में होना चाहिए (उसी तरह रेल्स प्रत्येक लॉग एंट्री पर टैग डालती हैं)। – leedm777

संबंधित मुद्दे