此时我的大部分代码都设计为在python 2.76上运行。所以我编写的库使用以下代码,以便我的库的任何使用者可以从库中进行调试日志记录:
所以在每个库文件中我都有:
log = logging.getLogger(__name__)
log.addHandler(logging.NullHandler())
这样,如果使用我的库的客户端脚本实例化一个logger对象,那么该库也会有日志输出。
但是,我现在需要调整这个库,使它在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?
请求任何帮助。
答案 0 :(得分: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
答案 1 :(得分:0)
以下是我推荐的解决方案:
#!/usr/bin/env python2.6
import os
import logging
modlog = logging.getLogger(__name__)
modlog.addHandler(logging.FileHandler(os.devnull))
# ... remaining code