2014-06-17 27 views
7

下面的代碼在'ipython qtconsole'中打印'我想要打印',但它不打印在普通的IPython中。日誌記錄模塊不打印在IPython中

import logging 
import logging.handlers 

log = logging.getLogger() 
f = logging.Formatter("%(asctime)s - %(module)s. %(funcName)s - %(levelname)s - %(message)s") 
fh = logging.handlers.TimedRotatingFileHandler('log.txt', 'W6') 
fh.setFormatter(f) 
log.addHandler(fh) 
log.setLevel(logging.INFO) 
log.info('I want this to print') 

在「IPython中qtconsole」但是我得到不同的問題,我試圖解釋here(哪也沒去這麼好,沒必要看了!)。

你能告訴我爲什麼嗎?

編輯:我使用Python 2.7

EDIT2:也許我真的只需要添加logging.StreamHandler。

+0

什麼版本的python? –

+0

你正在設置一個*文件*處理程序,所以輸出到文件'log.txt'。我不知道你爲什麼認爲控制檯應該在stdout上輸出... – Bakuriu

+0

這對我有用:我得到諸如「2014-06-17 11:39:29,422 - 」的行。 - 信息 - 我想這打印「在log.txt。 – Evert

回答

18

好像qtconsole增加了一個處理程序到root記錄:

In [1]: import logging 
    ...: root = logging.getLogger() 
    ...: root.handlers 
    ...: 
Out[1]: [<logging.StreamHandler at 0x7fd8e00e1f98>] 

當使用普通的Python解釋器,或只是ipython

In [1]: import logging 

In [2]: root = logging.getLogger() 

In [3]: root.handlers 
Out[3]: [] 

如果你想同時有同樣的表現,你應該或者將StreamHandler添加到正常的ipython的根日誌記錄器,或者從qtconsole解釋器中刪除StreamHandler

如果你想前者只需添加:

root = logging.getLogger() 
root.addHandler(logging.StreamHandler()) 

如果你想後,之前加入自己的處理程序,做到:

for handler in root.handlers[:]: 
    root.removeHandler(handler) 

注意,IPython中已經提供一些記錄到文件的機器。見the documentation。如果您只想使用ipython內部的代碼,使用它的魔法可能會更簡單。

+0

非常感謝! – HeinzKurt

+0

如果使用後一種解決方案,如果root擁有多個處理程序,則會因爲刪除迭代問題而無法正常工作。 使用代替: ''' 而LEN(root.handlers): root.removeHandler(root.handlers [0]) ''' –

+4

@RonanPaixão讀取代碼小心。我相信你錯過了3個有所作爲的角色,並阻止你描述的行爲。 – Bakuriu

1

如果您使用Bakuriu的後一種解決方案,如果root擁有多個處理程序,則會因爲刪除迭代問題而無法正常工作。

使用,而不是:

while len(root.handlers): 
    root.removeHandler(root.handlers[0]) 
+0

Bakuriu的回答沒有你描述的問題,這要歸功於使用'[:]'(他在你的評論中回覆中提到的3個字符)。但是,您的解決方案也可以。 – rob3c

2

什麼工作對我來說

進口記錄器在任何其他庫/代碼,在不同的細胞。這實際上是主要要求。如果我在一個小區負載記錄和其他庫,不管是什麼層次在小區,記錄不工作

import logging 
reload(logging) 
logger = logging.getLogger(__name__) 

後,才設定登錄配置,以避免打印pyspark負荷調試庫加載

logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s', 
        level=logging.INFO, 
        datefmt='%I:%M:%S') 
+0

我從一個Python 2.7 conda環境運行Spyder3,這爲我解決了它。謝謝! – Disco4Ever

相關問題