2015-10-16 96 views
1

此时我的大部分代码都被设计为在Python 2.76上运行。所以我写的库使用下面的代码,使我的图书馆的任何消费者可以调试日志记录从库中来:如何在python 2.6中使用日志记录NullHandler

所以在每一个库文件我有这样的:

log = logging.getLogger(__name__) 
log.addHandler(logging.NullHandler()) 

这样,如果一个客户端使用我的库的脚本实例化一个记录器对象,该库也将具有日志输出。

不过,我现在需要那么它运行在Python 2.6中调整这个库和它的抱怨这段代码:

Traceback (most recent call last): 
    File "./LCMTool.py", line 36, in <module> 
    from lcm_zfssa import * 
    File "/devel/v2/lcm_zfssa.py", line 20, in <module> 
    log.addHandler(logging.NullHandler()) 
    AttributeError: 'module' object has no attribute 'NullHandler' 

是否有办法来调整这个如此,这将与Python 2.6工作?

Thx寻求帮助。

回答

1

取决于如何分配你的问题是,从溶液中Python Guide(从requests source最终)可能的工作:尝试导入NullHandler和except ImportError子句中,定义类,像这样:

# Set default logging handler to avoid "No handler found" warnings. 
import logging 
try: # Python 2.7+ 
    from logging import NullHandler 
except ImportError: 
    class NullHandler(logging.Handler): 
     def emit(self, record): 
      pass 

logging.getLogger(__name__).addHandler(NullHandler()) 

但如果使用日志命名空间,你会再想要插入类:

# in the except clause, after the class def: 
logging.NullHandler = NullHandler 
0

这里是我推荐的解决方案:

#!/usr/bin/env python2.6 

import os 
import logging 
modlog = logging.getLogger(__name__) 
modlog.addHandler(logging.FileHandler(os.devnull)) 

# ... remaining code 
相关问题