2016-04-07 6 views
5

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

मैंने एमडीसी का उपयोग करने और कस्टम एक्सका प्रेषक का उपयोग करके नीचे दिए गए ब्लॉग में दिए गए समाधान में% X {req_id} का उपयोग करने की कोशिश की, लेकिन यह एकाधिक निष्पादन संदर्भ में काम नहीं करता है, और यह भी काम नहीं करता है भरोसेमंद एकल निष्पादन संदर्भ में, जहां कभी-कभी यह req_id शून्य देता है। (http://yanns.github.io/blog/2014/05/04/slf4j-mapped-diagnostic-context-mdc-with-play-framework/)

जटिल और विशाल कोड आधार के कारण प्रत्येक फ़ंक्शन कॉल में अनुरोध आईडी पास करना संभव नहीं है। क्या कोई तरीका है कि हम इसे कम से कम परिवर्तन के साथ प्राप्त कर सकते हैं? हमें लॉग फ्रेमवर्क द्वारा जेनरेट किए गए लॉग में उस अनुरोध आईडी की भी आवश्यकता है।

उत्तर

0

मुझे डीबगिंग उद्देश्य के लिए कुछ ट्रेस टोकन लॉग करने के लिए एक ही आवश्यकता थी। कमोन लाइब्रेरी में यह सुविधा पहले से ही http://kamon.io/integrations/logback/trace-token-converter/ है।

मेरे ग्लोबल.जावा में: मैं ऑनस्टार्ट() में Kamon.start() करता हूं और संदर्भ को अनुरोध करता हूं()। लॉगिंग पैटर्न में traceToken का भी उपयोग करें।

public Action onRequest(Http.Request request, Method actionMethod) { 
    TraceContext tx = Kamon.tracer().newContext("reqc", new Some<>(Utils.randStr(8))); 
    Tracer.setCurrentContext(tx); 
    Logger.info("Request: " + request.toString()); 
    Action x = super.onRequest(request, actionMethod); 
    tx.finish(); 
    return x; 
} 
+0

लेकिन onRequest() Play में सभी निष्पादन संदर्भ में उपलब्ध नहीं है। मेरी समझ के अनुसार, क्या मैं सही हूँ? – user3828976

+0

'onRequest()' अनुरोध केवल तभी उपलब्ध होता है जब अनुरोध किया जाता है। इसी तरह अन्य सभी संदर्भों में आपको 'TraceContext' बनाना और समाप्त करना होगा। – hrushikesh

+0

हमने इसे एकल निष्पादन संदर्भ में ले जाकर हल किया। – user3828976

0

हमने इसे एकल निष्पादक संदर्भ में ले जाकर हल किया और 2.5 खेलने के लिए भी ऐसा करने की सिफारिश की। इस परिदृश्य में एमडीसी संदर्भ काम करेगा।

+0

तो आपने इसे हल किया, लेकिन कैसे? क्योंकि यह सिर्फ एक टिप्पणी नहीं है! Application.conf में –

+0

आपने अलग निष्पादन संदर्भ को परिभाषित किया होगा। बस एक का उपयोग न करें, मेरे पास अब conf फ़ाइल की प्रति नहीं है। – user3828976

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