如何在python 2.6中使用日志记录NullHandler

时间:2015-10-16 16:56:46

标签: logging python-2.6

此时我的大部分代码都设计为在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?

请求任何帮助。

2 个答案:

答案 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