2010-06-23 19 views
6

Google App Engine में logging मॉड्यूल से आउटपुट के स्वरूपण को कैसे बदल सकता है?Google ऐप इंजन/पायथन - लॉगिंग स्वरूपण बदलें

मैं कोशिश की है, उदा .:

log_format = "* %(asctime)s %(levelname)-8s %(message)s" 
    date_format = "%a, %d %b %Y %H:%M:%S" 

    console = logging.StreamHandler() 
    fr = logging.Formatter(log_format) 
    console.setFormatter(fr) 

    logger = logging.getLogger() 
    logger.addFilter(SuperfluousFilter()) 
    logger.addHandler(console) 

    logger.setLevel(logging.DEBUG) 
    console.setLevel(logging.DEBUG) 

    logging.error("Reconfiguring logging") 

हालांकि इस डुप्लिकेट प्रवेश उत्पादन में परिणाम है: मेरी नई StreamHandler ऊपर से (या कहीं गूगल कोड में) google/appengine/tools/dev_appserver.py से प्रवेश हैंडलर के साथ एक, और एक। उपरोक्त कोड आउटपुट:

 
ERROR 2010-06-23 20:46:18,871 initialize.py:38] Reconfiguring logging 
2010-06-23 20:46:18,871 ERROR Reconfiguring logging 

कहाँ शीर्ष पंक्ति मेरे कोड से नीचे की रेखा dev_appserver.py से स्पष्ट रूप से है।

तो मुझे लगता है कि अनुवांशिक प्रश्न यह है: Google App Engine के स्वरूपण को कैसे बदल सकता है, फिर भी डुप्लिकेट आउटपुट से बचें?

पढ़ने के लिए धन्यवाद।

ब्रायन

उत्तर

10
यहाँ

एक तरह से आप उत्पादन को डुप्लिकेट के बिना प्रवेश प्रारूप बदल सकता है: क्योंकि आप सीधे जड़ में संग्रहीत handlers सूची तक पहुँच करने के लिए है

# directly access the default handler and set its format directly 
logging.getLogger().handlers[0].setFormatter(fr) 

यह एक हैक का एक सा है लकड़हारा। समस्या यह है कि आपके कोड को चलाने से पहले GAE स्वचालित रूप से logging का उपयोग करता है - यह एक डिफ़ॉल्ट हैंडलर बनाता है। दुर्भाग्य से, मैं नहीं देखता कि आप उपरोक्त के रूप में handlers सूची तक सीधे पहुंच के बिना इस हैंडलर का संदर्भ कैसे प्राप्त कर सकते हैं।

+0

यह बहुत उपयोगी है। रूट लॉगर पर 'setLevel (logging.CRITICAL)' चलाने और stderr पर एक नया लॉगर बनाने का एक और विकल्प मैंने सोचा है। –

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