2010-06-23 10 views
6

हमारे व्यापार में प्रवेश करने बफ़र्स, हम हर अनुरोध/प्रतिक्रिया जो हमारे सर्वर के लिए आ रहा लॉग इन करने की आवश्यकता होती है। इस समय, हम मानक कार्यान्वयन के रूप में एक्सएमएल का उपयोग कर रहे हैं। लॉग फ़ाइलों अगर हम डिबग करने के लिए की जरूरत है/कुछ त्रुटि का पता लगाने के लिए इस्तेमाल किया जाता है।प्रोटोकॉल

मैं अगर हम प्रोटोकॉल बफ़र्स के लिए स्विच तरह का उत्सुक हूँ, क्योंकि यह द्विआधारी है, क्या सबसे अच्छा तरीका है फाइल करने के लिए लॉग इन करने के अनुरोध/प्रतिक्रिया होगी?

उदाहरण के लिए:

FileOutputStream उत्पादन = नए FileOutputStream ("\ फ़ाइलें \ log.txt"); request.build() writeTo (outout)।

किसी को भी जो अपने आवेदन में प्रोटोकॉल बफ़र्स इस्तेमाल किया गया है, कैसे आप अपने अनुरोध/प्रतिक्रिया लॉग ऑन करते हैं, सिर्फ मामले में हम उद्देश्य डीबगिंग के लिए इसकी जरूरत है?

धन्यवाद

उत्तर

0

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

एक और अधिक उचित समाधान पाठ के रूप में अपने बाइनरी डेटा डंप करने के लिए किया जाएगा। मैं पाठ की "रेखाओं" के बारे में सोच रहा हूं, फिर भी जो भी टैगिंग जानकारी आपको प्रासंगिक लगता है, उसके बाद दशमलव या हेक्स में कुछ लंबाई की जानकारी के बाद, आपके बफर को डंप करने के लिए आवश्यक हेक्स बाइट्स के साथ शुरू होता है - इस प्रकार आप समाप्त हो सकते हैं कुछ काफी लंबी लाइनें। लेकिन चूंकि फ़ाइल लाइन संरचित है, इसलिए आप इसके साथ काम करने के लिए टेक्स्ट उन्मुख टूल (सबसे सरल मामले में एक संपादक) का उपयोग कर सकते हैं। हेक्स डंपिंग अनिवार्य रूप से इसका मतलब है कि आप डेटा के एक बाइट (प्लस ओवरहेड) का प्रतिनिधित्व करने के लिए लॉग में दो बाइट्स का उपयोग कर रहे हैं। हे, डिस्क स्पेस इन दिनों सस्ता है।

यदि उन बाइनरी बफर के पास काफी सुसंगत संरचना है, तो आप फ़ील्ड को तोड़ सकते हैं और लेबल कर सकते हैं (या ऐसा कुछ) ताकि आपका डेटा थोड़ा और अधिक पठनीय हो और अधिक महत्वपूर्ण रूप से बेहतर खोजा जा सके। निस्संदेह यह आपके ऊपर निर्भर करता है कि आप अपने लॉग रिकॉर्ड को सुंदर बनाने में कितना प्रयास करना चाहते हैं; लेकिन यहां बिताए गए समय में थोड़ी देर बाद विश्लेषण में भुगतान किया जा सकता है।

1

हम सी ++ वस्तु पर ShortDebugString() विधि का उपयोग एक पाठ-फाइल करने के लिए सभी आने वाली और बाहर जाने वाले संदेशों के एक मानव पठनीय संस्करण को लिखने के लिए। ShortDebugString() जावा में toString() विधि द्वारा लौटाए गए एक ही स्ट्रिंग का एक-पंक्ति संस्करण देता है। सुनिश्चित नहीं है कि जावा में एक ही चीज़ को पूरा करना कितना आसान है।

1

टीएल; डीआर: टेक्स्ट में डिबगिंग लॉग लिखें, बाइनरी में दीर्घकालिक लॉग लिखें।

  1. पाठ प्रारूप में अपने लॉग लेखन:

    वहाँ कम से कम दो तरीके आप इस प्रवेश कर सकते हैं (और शायद, वास्तव में, आप दोनों करना चाहिए) कर रहे हैं। यह डिबगिंग और आपकी आंखों के साथ समस्याओं की जांच करने के लिए अच्छा है।

  2. बाइनरी प्रारूप में अपने लॉग लिखना - इससे भविष्य में विश्लेषण बहुत तेज़ हो जाएगा क्योंकि आप उसी प्रोटोकॉल बफर कोड का उपयोग करके डेटा लोड कर सकते हैं और उन पर सभी प्रकार की चीजें कर सकते हैं।

काफी ईमानदारी से, यह तकनीक उस जगह से हुई है जिस तरह से यह तकनीक आई है।

+0

"काफी ईमानदारी से, यह तकनीक इस जगह से हुई है जिस तरह से यह किया गया है।" - प्रोटोकॉल बफर Google से आए थे। क्या आपका मतलब है कि आप जानते हैं कि Google संरचित लॉगिंग के लिए प्रोटोकॉल बफर का उपयोग कर रहा है? क्या आपके पास उस पर कोई और जानकारी है? –