2015-10-16 48 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