2014-07-13 78 views
5

在IPython的筆記本電池我寫道:在運行IPython筆記本時,python日誌默認存儲在哪裏?

import logging 
logging.basicConfig(level=logging.DEBUG) 
logger = logging.getLogger(__name__) 
handler = logging.FileHandler('model.log') 
handler.setLevel(logging.INFO) 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
handler.setFormatter(formatter) 
logger.addHandler(handler) 

請注意,我提供一個文件名,而不是路徑。

我在哪裏可以找到該日誌? (運行'查找'並找不到它...)

回答

7

有多種方法可以設置IPython工作目錄。如果你沒有在你的IPython profile/config,environment或notebook中設置這些,日誌應該在你的工作目錄中。也試試$ ipython locate打印默認的IPython目錄路徑,日誌可能在那裏。

給它一個絕對的文件路徑,看看它是否工作呢?

除此之外調用logging.basicConfig似乎並沒有做一個IPython的筆記本電腦裏的任何東西:

# In: 
import logging 
logging.basicConfig(level=logging.DEBUG) 
logger = logging.getLogger() 
logger.debug('root debug test') 

有沒有輸出。

根據文檔,如果根記錄器已經爲它配置了處理程序,則logging.basicConfig不會執行任何操作。這似乎是這種情況,IPython顯然已經建立了根記錄器。我們可以確認:

# In: 
import logging 
logger = logging.getLogger() 
logger.handlers 

# Out: 
[<logging.StreamHandler at 0x106fa19d0>] 

所以我們可以嘗試設置手動根記錄器級別:

import logging 
logger = logging.getLogger() 
logger.setLevel(logging.DEBUG) 
logger.debug('root debug test') 

它產生於筆記本電腦格式化輸出:

enter image description here

現在到設置文件記錄器:

# In: 
import logging 

# set root logger level 
root_logger = logging.getLogger() 
root_logger.setLevel(logging.DEBUG) 

# setup custom logger 
logger = logging.getLogger(__name__) 
handler = logging.FileHandler('model.log') 
handler.setLevel(logging.INFO) 
logger.addHandler(handler) 

# log 
logger.info('test info my') 

這導致寫入輸出到筆記本和model.log文件,這對我來說位於我開始IPython和筆記本從一個目錄。

請注意,在不重新啓動IPython內核的情況下重複調用這段代碼將導致在每次運行時爲記錄器創建並附加另一個處理程序,並且隨着每次日誌調用記錄到文件的消息數量將增加。

+0

謝謝,我有搜索目錄,它不存在... – user2808117

+0

@ user2808117 Humm,它應該在那裏或在當前的工作目錄,然後,你從哪裏啓動筆記本。你使用IPython profile/config並設置'c.NotebookManager.notebook_dir','c.FileNotebookManager.notebook_dir'或'c.NotebookApp.notebook_dir'? – famousgarkin

+0

我有一個配置文件,但該屬性未配置。難道是由於某些原因,日誌文件不是在這種情況下創建的? (我用sudo運行'find',在根目錄下,找不到文件) – user2808117

2

聲明日誌文件的路徑在basicConfig這樣的:

log_file_path = "/your/path/" 
logging.basicConfig(level = logging.DEBUG, 
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', 
        filename = log_file_path, 
        filemode = 'w') 

然後就可以開始記錄,爲什麼不不同的日誌格式添加到控制檯,如果你想:

# define a Handler which writes INFO messages or higher to the sys.stderr 
console = logging.StreamHandler() 
console.setLevel(logging.DEBUG) 
# set a format which is simpler for console use 
formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') 
# tell the handler to use this format 
console.setFormatter(formatter) 
# add the handler to the root logger 
logging.getLogger().addHandler(console) 
logger = logging.getLogger() 

etvoilà。