2011-03-17 7 views
6

यह पायथन 3.2 (जीएनयू/लिनक्स x86_64) पर लॉगिंग मॉड्यूल के बारे में है: क्या शब्दकोश कॉन्फ़िगरेशन के साथ कस्टम हैंडलर सेट करना संभव है?पायथन, लॉगिंग: शब्दकोश कॉन्फ़िगरेशन के साथ कस्टम हैंडलर का उपयोग करें?

import logging 
import logging.config 

class CustomHandler(logging.StreamHandler): 
    pass 

logconfig = { 
    'version': 1, 
    'handlers': { 
     'console': { 
      'class': 'CustomHandler', 
     } 
    }, 
    'loggers': { 
     'custom': { 
      'handlers': ['console'], 
     } 
    } 
} 
logging.config.dictConfig(logconfig) 
logger = logging.getLogger('custom') 
logger.error('Error message') 

कौन सा निश्चित रूप से काम नहीं करता है: इस कोड मैं कोशिश कर रहा हूँ है।

Traceback (most recent call last): 
    File "/usr/lib/python3.2/logging/config.py", line 390, in resolve 
    found = self.importer(used) 
ImportError: No module named CustomHandler 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "/usr/lib/python3.2/logging/config.py", line 569, in configure 
    handler = self.configure_handler(handlers[name]) 
    File "/usr/lib/python3.2/logging/config.py", line 698, in configure_handler 
    klass = self.resolve(config.pop('class')) 
    File "/usr/lib/python3.2/logging/config.py", line 403, in resolve 
    raise v 
    File "/usr/lib/python3.2/logging/config.py", line 390, in resolve 
    found = self.importer(used) 
ValueError: Cannot resolve 'CustomHandler': No module named CustomHandler 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "./prova.py", line 91, in <module> 
    logging.config.dictConfig(logconfig) 
    File "/usr/lib/python3.2/logging/config.py", line 777, in dictConfig 
    dictConfigClass(config).configure() 
    File "/usr/lib/python3.2/logging/config.py", line 574, in configure 
    '%r: %s' % (name, e)) 
ValueError: Unable to configure handler 'console': Cannot resolve 'CustomHandler': No module named CustomHandler 

नहीं है कि स्रोत में importer विधि है जो मैं वास्तव में समझ में नहीं आता ... किसी भी विचार: यह उत्पादन होता है?

धन्यवाद!

उत्तर

12

आपको यह बताना होगा कि CustomHandler कक्षा कहां खोजें। स्ट्रिंग में मॉड्यूल (और संभवतः पैकेज) होना चाहिए जहां यह पाया जा सकता है। यदि आप सीधे इस स्क्रिप्ट को चला रहे हैं, तो आप __main__.CustomHandler का उपयोग कर सकते हैं। अन्यथा, your_module.CustomHandler का उपयोग करें, जहां आप श्रेणी वाले मॉड्यूल के नाम के साथ your_module को प्रतिस्थापित करते हैं।

+0

प्रतिभा !!!!! बहुत बहुत धन्यवाद – kynikos

+0

कोई समस्या नहीं, खुशी है कि मैं मदद कर सकता हूं :) – dappawit