मैं वर्तमान में pyftpdlib मॉड्यूल के 1.0.0 रिलीज पर काम कर रहा हूं। यह नई रिलीज में कुछ पिछड़े असंगत परिवर्तनों को पेश करेगी कि कुछ एपीआई अब बाइट्स को स्वीकार नहीं करेंगे लेकिन यूनिकोड। जबकि मैं इस ब्रेकेज के हिस्से के रूप में हूं, मैं अपने लॉगिंग फ़ंक्शंस से छुटकारा पाने के लिए संभावना पर विचार कर रहा था, जो वर्तमान में प्रिंट स्टेटमेंट का उपयोग करता है, और इसके बजाय लॉगिंग मॉड्यूल का उपयोग करता है।लॉगिंग बनाम प्रिंट() + लॉगिंग के फायदे सर्वोत्तम अभ्यास
के रूप में अभी प्रतिनिधियों 3 कार्यों के लिए प्रवेश pyftpdlib:
def log(s):
"""Log messages intended for the end user."""
print s
def logline(s):
"""Log commands and responses passing through the command channel."""
print s
def logerror(s):
"""Log traceback outputs occurring in case of errors."""
print >> sys.stderr, s
उपयोगकर्ता के लॉग अनुकूलित करने के लिए (उदाहरण के लिए एक फाइल करने के लिए उन्हें लिखना) तैयार है बस के रूप में इन 3 कार्यों के ऊपर लिख करने वाला:
>>> from pyftpdlib import ftpserver
>>>
>>> def log2file(s):
... open('ftpd.log', 'a').write(s)
...
>>> ftpserver.log = ftpserver.logline = ftpserver.logerror = log2file
अब मैं सोच रहा हूं: इस दृष्टिकोण से छुटकारा पाने के लिए क्या फायदे होंगे और इसके बजाय लॉगिंग मॉड्यूल का उपयोग करें? मॉड्यूल विक्रेता परिप्रेक्ष्य से, मुझे अपने मॉड्यूल में लॉगिंग कार्यक्षमताओं का खुलासा कैसे करना चाहिए? मैं इस क्या करना चाहिए:
import logging
logger = logging.getLogger("pyftpdlib")
... और मेरे दस्तावेज़ में कहा गया है कि "लकड़हारा" है वस्तु जो माना जाता है मामले उपयोगकर्ता अनुकूलित करने के लिए कैसे लॉग व्यवहार करते हैं चाहता है में इस्तेमाल किया जाएगा? यह जानबूझ कर के रूप में एक पूर्व निर्धारित प्रारूप उत्पादन स्थापित करने के लिए वैध है:
FORMAT = '[%(asctime)] %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger('pyftpdlib')
...?
क्या आप किसी तृतीय-पक्ष मॉड्यूल के बारे में सोच सकते हैं, क्या मैं सार्वजनिक एपीआई के हिस्से के रूप में लॉगिंग कार्यक्षमता का खुलासा और समेकित कहां से संकेत ले सकता हूं?
अग्रिम धन्यवाद।
क्या इसका मतलब है कि डिफ़ॉल्ट रूप से कोई आउटपुट नहीं बनाया जाएगा? उस मामले में मैं इससे खुश नहीं हूं। –
यह डिफ़ॉल्ट रूप से किसी भी आउटपुट का उत्पादन नहीं करेगा। साथ ही, 'लॉगिंग। नलहैंडलर' केवल पायथन 2.7 (और> 3.2 मुझे लगता है) में उपलब्ध है, जो एक समस्या हो सकती है। यदि आप केवल 'logger = logging.getLogger (' pyftpdlib ') का उपयोग करते हैं, तो आपको डिफ़ॉल्ट रूप से संदेश मिलेंगे और आप आउटपुट को कॉन्फ़िगर करने के तरीके को प्रदर्शित करने के लिए अपने उपयोगकर्ताओं को' logging.setLevel' और 'logging.setFormatter' दस्तावेज़' पर इंगित कर सकते हैं। आपकी पुस्तकालय के लिए संदेश। साथ ही, आप फ़ाइल कॉन्फ़िगरेशन ['logging.config.fileConfig'] (http://docs.python.org/dev/library/logging.config.html#logging.config.fileConfig) का उपयोग कर उपयोगकर्ताओं को कॉन्फ़िगर करने की अनुमति देने के लिए उपयोग कर सकते हैं लॉगर – Chris
इसके अलावा, अपने मूल प्रश्नों में से किसी एक का जवाब देने के लिए, प्रिंट विवरणों के बजाय लॉगिंग का उपयोग करने का लाभ संक्षेप में [पीईपी 282] (http://www.python.org/dev/peps/pep-0282/) में उल्लिखित है: * यदि मानक लाइब्रेरी में एक एकल लॉगिंग तंत्र स्थापित किया गया है, 1) लॉगिंग को 'अच्छी तरह से' करने की अधिक संभावना है, और 2) एकाधिक पुस्तकालय बड़े अनुप्रयोगों में एकीकृत किए जा सकेंगे जिन्हें उचित रूप से सुसंगत रूप से लॉग किया जा सकता है। * – Chris