2012-06-19 14 views
44

मैं जटिल डेटा संरचना दिखाने के लिए पीप्रिंट के आउटपुट का उपयोग करना चाहता हूं, लेकिन मैं इसे stdout के बजाय लॉगिंग मॉड्यूल का उपयोग करके आउटपुट करना चाहता हूं।लॉगिंग का उपयोग प्रिंटिंग का उपयोग प्रिंट करें

ds = [{'hello': 'there'}] 
logging.debug(pprint.pprint(ds)) # outputs as STDOUT 
+5

पहले दस्तावेज़ों को पढ़ने के लिए परेशान करें:

for line in pprint.pformat(ds).split('\n'): logging.debug(line) 

कुछ थोड़ा अच्छे पैदा करता है इस तरह के सवाल पूछना। वहीं है। इसके अलावा, आपको और जवाब स्वीकार करना चाहिए। –

+0

मैंने दस्तावेज़ों के माध्यम से देखा और 'pprint ({}, स्ट्रीम) 'पाया, लेकिन इसे बल्कि अजीब पाया। मैंने सोचा होगा कि 'स्पप्रिंट' जैसे कुछ 'pformat' (जैसे 'c') से अच्छे हो सकते हैं। – yee379

+3

'pprint.pformat() 'उस पृष्ठ पर था। –

उत्तर

93

उपयोग pprint.pformat एक स्ट्रिंग मिलता है, और फिर अपने प्रवेश ढांचे को भेजने के लिए।

from pprint import pprint, pformat 
ds = [{'hello': 'there'}] 
logging.debug(pformat(ds)) 
+0

धन्यवाद! – yee379

+4

यदि आप डीबगिंग करने के बाद इस कोड को नहीं हटाते हैं, तो आपको शायद इसे "अगर Logger.isEnabledFor (logging.DEBUG) से सुरक्षित रखना चाहिए:" जब आप अपने आउटपुट का उपयोग नहीं करेंगे तो पोर्टफॉर्म चलाने से बचने के लिए: http://docs.python.org/2/library/logging.html#logging.Logger.isEnabledFor –

+0

@EdBrannin क्या पोर्टफॉर्म उस ओवरहेड को जोड़ता है कि सभी DEBUG लॉग विवरणों में सशर्त जोड़ने की समस्या के लायक है? – undefinedvariable

9

समाधान ऊपर काफी मेरे लिए इसे काट नहीं है क्योंकि मैं भी जब प्रवेश करने नाम और levelname जोड़ने के लिए एक फ़ॉर्मेटर का उपयोग कर रहा था। यह थोड़ा गन्दा लग रहा है:

__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa', 
'bbbbbbbbbbbbbbbbbbbb', 
'cccccccccccccccccccc', 
'dddddddddddddddddddd'] 
__main__ : DEBUG : Some other logging text 

एक और अधिक सुरुचिपूर्ण समाधान हो सकता है, लेकिन यह:

__main__ : DEBUG : ['aaaaaaaaaaaaaaaaaaaa', 
__main__ : DEBUG : 'bbbbbbbbbbbbbbbbbbbb', 
__main__ : DEBUG : 'cccccccccccccccccccc', 
__main__ : DEBUG : 'dddddddddddddddddddd'] 
__main__ : DEBUG : Some other logging text 
+4

मानव उपभोग के लिए निकर की आवश्यकता है। अगर आप लॉगस्टैश या इसी तरह के टूल्स पर लॉग शिपिंग कर रहे हैं तो बहुत अच्छा नहीं है, और एक चाहते हैं एकल मल्टीलाइन संदेश को एक संदेश के रूप में भेजा जाना चाहिए। –

+0

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

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