2012-10-01 18 views
8

AppEngine अपने प्रवेश के लिए जुलाई का उपयोग करता है गूगल AppEngine में प्रवेश प्रारूप कैसे बदल सकता हूँ और मैं appengine-web.xml में logging.properties फ़ाइल और उस के संदर्भ में कॉन्फ़िगर किया हैमैं

समस्या

है कि प्रारूप कि AppEngine प्रत्येक लॉग लाइन पर लगभग 180 वर्णों के बाद कंसोल लॉग में डेटा को छोटा कर दिया जाता है। और चूंकि इसका एक बड़ा हिस्सा विधि और वर्ग के नाम (पैकेज समेत) के साथ लिया जाता है और तिथि से बाहर आने वाले वास्तविक लॉग संदेश में से अधिकांश नहीं है।

मैंने भाग्य के बिना प्रोग्रामिंग और लॉगिंग.प्रोपर्टीज के माध्यम से, अपने स्वयं के फॉर्मेटर को कॉन्फ़िगर करने का प्रयास किया है।

मुझे लगता है कि मैं slf4j, logback या log4j के माध्यम से अपने सभी लॉग धक्का सकता है, लेकिन मुझे विश्वास है कि ऐसा करने से जो शब्दाडंबर की अपनी शैली है AppEngine लॉग कंसोल में stdout के रूप में प्रकट करने के लिए सभी तरह के लॉग का कारण बनता है।

क्या ऐपइंजिन लॉग के लिए एक विशेष प्रारूप को परिभाषित करने का कोई तरीका है और यदि ऐसा है तो कैसे? टी पर्याप्त होगा अगर प्रत्येक लॉग लाइन को 180 वर्णों तक छोटा नहीं किया जा रहा था।

+1

मैं इस एक ही समस्या आ रही है। मैंने एक कस्टम फॉर्मेटर बनाया है, और इसे अपने logging.properties में निर्दिष्ट किया है, लेकिन ऐसा लगता है कि यह एपेंगेन द्वारा पूरी तरह से अनदेखा किया जाता है। मुझे यकीन है कि मेरी logging.properties फ़ाइल को उठाया जा रहा है क्योंकि लॉग स्तर बदलना काम करता है। – sappenin

+0

अच्छा सवाल है, लेकिन मुझे लगता है कि सारांश भ्रामक है: समस्या यह है कि ऐप इंजन कंसोल में प्रदर्शित लॉग लाइनों को छोटा कर दिया जाता है। – Tom

उत्तर

0

इसे थोड़ा और खोदने के बाद, मुझे एपेंगेन रनटाइम द्वारा उठाए जाने के लिए कस्टम JUL हैंडलर या फ़ॉर्मेटर नहीं मिल सका।

public class MyLoggingListener implements ServletContextListener 
{ 
    private static Logger LOG; 

    @Override 
    public void contextInitialized(ServletContextEvent sce) 
    { 
     LOG = Logger.getLogger(""); 
     Handler[] handlers = LOG.getHandlers(); 
     for (Handler handler : handlers) 
     { 
      handler.setFormatter(new MyLogFormatter()); 
     } 
    } 

    @Override 
    public void contextDestroyed(ServletContextEvent sce) 
    {} 
} 

अपडेट:: उपरोक्त कोड में काम करता है

<listener> 
    <listener-class>MyLoggingListener</listener-class> 
</listener> 

यहां नमूने ServletContextListener है: तो बजाय, मैं, इस प्रकार के रूप में मेरे स्वयं के कस्टम फ़ॉर्मेटर के साथ रूट लकड़हारा प्रारंभ करने में एक ServletContextListener बनाया देव पर्यावरण, लेकिन Appengine पर नजरअंदाज कर दिया जाता है। इस पर ड्राइंग बोर्ड पर वापस जाएं।

2

क्या आपने लॉग डाउनलोड सुविधा का उपयोग करने का प्रयास किया है: यह लॉग को छोटा नहीं करता है, आपको सब कुछ देखने के लिए मिलता है, और लॉग प्रविष्टियों को डाउनलोड करने के लिए दिन और गंभीरता की संख्या निर्दिष्ट कर सकते हैं।

C:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.7.2.1\appengine-java-sdk-1.7.2.1\bin>appcfg.cmd --severity=DEBUG --num_days=2 request_logs C:\workspace\my_app\war C:\workspace\MY_LOGS.TXT 

<path to SDK>/appcfg.cmd --severity=DEBUG --num_days=2 request_logs <path to war> <path to log> 

यही एकमात्र तरीका है जिसे मैंने अपने लॉग विवरण देखने में सक्षम पाया। डिफ़ॉल्ट लॉग स्तर INFO है, इसलिए आपको उपयोगी होने के लिए गंभीरता और num_days तर्कों का उपयोग करना होगा।

इसके अतिरिक्त, यदि आप बैकएंड के लिए लॉग डाउनलोड करना चाहते हैं, तो आपको कमांड लाइन पर निम्न विकल्प का उपयोग करके बैकएंड संस्करण निर्दिष्ट करना होगा। जहां कार्यकर्ता बैकएंड का नाम है।

--version=worker 
+0

लॉग डाउनलोड सुविधा के लिए प्रलेखन का लिंक यहां दिया गया है। https://developers.google.com/appengine/docs/java/tools/uploadinganapp#Downloading_Logs –

+0

धन्यवाद ग्रेग, लॉग डाउनलोड करने से मुझे लंबी लॉग लाइन पढ़ने की क्षमता मिलती है। लेकिन यह अभी भी गधे में पढ़ने में दर्द है और मैं केवल उन मशीनों तक पहुंच सकता हूं जिन पर ऐप-इंजन-एसडीके भी है (जो केवल 30% समय है)। मैं वास्तव में लॉग प्रारूप को कॉन्फ़िगर करने का एक तरीका ढूंढ रहा हूं ताकि मैं ब्राउज़र से लॉग पढ़ने के लिए तैयार हो। – William

+0

दरअसल, यदि आप उस स्क्रिप्ट फ़ाइल के अंदर देखते हैं तो मैंने उल्लेख किया है कि आप वास्तव में जावा एप्लिकेशन शुरू कर रहे हैं, और आपको केवल उस एकल जेएआर फ़ाइल को ले जाने की आवश्यकता है। –

0

अनुप्रयोग इंजन विन्यास उपकरण खुद के लिए स्रोत कोड के माध्यम से देख रहे हैं, मैंने देखा है कि सभी एक ही LogService जो आप LogService एपीआई के माध्यम से अपने आप को के लिए उपयोग किया जाएगा बुला यह कर रही है।

इसलिए, आपके प्रश्न का उत्तर वास्तव में आपके कोड बेस में निम्न लिंक से कोड छोड़ने जितना सरल है, इसे केवल व्यवस्थापक उपयोगकर्ता और समस्या हल करने के लिए सुरक्षित है।

https://developers.google.com/appengine/docs/java/logservice/overview

+0

वैसे यह एक बेहतर प्रारूप में लॉग पुनर्प्राप्त करने के लिए पृष्ठ को हार्डकोड करने के लिए बड़े पैमाने पर ओवरकिल जैसा लगता है क्योंकि AppEngine काम करने वाले लॉगर के लिए फ़ॉर्मेटर को कॉन्फ़िगर करने में सक्षम नहीं लगता है (या कोई भी नहीं जानता है)। लेकिन नरक मुझे लगता है कि मेरे सवालों का जवाब धन्यवाद। – William

+0

अंतिम नोट: मुझे एहसास हुआ कि प्लस आइकन पर क्लिक करने से पूर्ण लॉग रिकॉर्ड दिखाने के लिए लॉग लाइनें फैली हुई हैं। तो मेरे पास मेरे पूर्ण रिकॉर्ड तक पहुंच है, यह सिर्फ कुछ हद तक खराब है। – William