2011-03-17 250 views
6

这是关于Python 3.2(GNU/Linux x86_64)上的日志模块:是否可以使用字典配置设置自定义处理程序? 这是我想要的代码:Python,日志记录:使用自定义处理程序与字典配置?

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 2011-03-18 00:10:03

+0

没问题,很高兴我能帮忙:) – dappawit 2011-03-18 00:42:34

相关问题