2012-11-12 15 views
6

मैं चेतावनी प्राप्त करने के लिए निम्नलिखित कोड का इस्तेमाल किया है लॉग इन करने की:मैं logging.captureWarnings के साथ कैप्चर की गई चेतावनियों को कैसे प्रारूपित करूं?

import logging 
logging.captureWarnings(True) 
formatter = logging.Formatter('%(asctime)s\t%(levelname)s\t%(message)s') 
console_handler = logging.StreamHandler() 
console_handler.setLevel(logging.DEBUG) 
console_handler.setFormatter(formatter) 

यह काम करता है, फिर भी, मेरा प्रवेश फ़ॉर्मेटर लागू नहीं होती है, और चेतावनी बाहर आने के लिए इस तरह लग रही:

WARNING:py.warnings:/home/joakim/.virtualenvs/masterload/local/lib/python2.7/site-packages/MySQL_python-1.2.3c1-py2.7-linux-x86_64.egg/MySQLdb/cursors.py:100: Warning: 
InnoDB: ROW_FORMAT=DYNAMIC requires innodb_file_per_table. 

अपेक्षित प्रारूप की बजाय:

2012-11-12 18:19:44,421 INFO START updating products 

मैं कैप्चर किए गए चेतावनी संदेशों पर अपना सामान्य स्वरूपण कैसे लागू कर सकता हूं? py.warnings नाम के एक लकड़हारा के लिए

उत्तर

5

के लिए आप एक हैंडलर बनाई कोशिश करेंगे, लेकिन इसका इस्तेमाल करने के लिए लॉगिंग मॉड्यूल के लिए कॉन्फ़िगर कभी नहीं:

console_handler = logging.StreamHandler() 
console_handler.setLevel(logging.DEBUG) 
console_handler.setFormatter(formatter) 

तुम एक लकड़हारा को यह हैंडलर जोड़ने की जरूरत है; उदाहरण के लिए रूट लॉगर:

logging.getLogger().addHandler(console_handler) 

वैकल्पिक रूप से, आप केवल चेतावनी लॉगर में हैंडलर जोड़ सकते हैं; captureWarnings() documentation कहा गया है कि यह कब्जा कर लिया चेतावनियों के लिए py.warnings उपयोग करता है:

logging.basicConfig(format='%(asctime)s\t%(levelname)s\t%(message)s', level=logging.DEBUG) 

ऊपर बुनियादी विन्यास:

logging.getLogger('py.warnings').addHandler(console_handler) 

इसके बजाय स्पष्ट रूप से एक हैंडलर और संरूपक बनाने की, आप भी सिर्फ basicConfig() जड़ लकड़हारा कॉन्फ़िगर करने के लिए कॉल कर सकते हैं आपके द्वारा स्थापित हैंडलर कॉन्फ़िगरेशन का नैतिक समतुल्य है।

3

logging.captureWarnings लॉग, ताकि आप उस लकड़हारा करने के लिए अपने हैंडलर जोड़ने की जरूरत:

import logging 

logging.captureWarnings(True) 
formatter = logging.Formatter('%(asctime)s\t%(levelname)s\t%(message)s') 
console_handler = logging.StreamHandler() 
console_handler.setLevel(logging.DEBUG) 
console_handler.setFormatter(formatter) 
py_warnings_logger = logging.getLogger('py.warnings') 
py_warnings_logger.addHandler(console_handler) 
0

documentation का कहना है कि तो कब्जा सच है, चेतावनी मॉड्यूल द्वारा जारी चेतावनी पर ले जाया जाएगा लॉगिंग सिस्टम। विशेष रूप से, चेतावनियों का उपयोग करके चेतावनी को स्वरूपित किया जाएगा .formatwarning() और परिणामस्वरूप स्ट्रिंग को 'py.warnings' नामक लॉगर में लॉग ऑन किया गया है जिसमें चेतावनी की गंभीरता है।

इसलिए मैं

# get the 'py.warnings' logger 
log = logging.getLogger('py.warnings') 
# assign the handler to it 
log.addHandler(console_handler)