2014-09-21 116 views
1

我是Python新手。我使用Python模式的Vim編輯和測試我的代碼,並注意到如果我多次運行相同的代碼,日誌文件只會在第一次運行代碼時更新。例如下面是一個名爲「testlogging.py」一段代碼重置Python日誌解釋器

#!/usr/bin/python2.7 
import os.path 
import logging 

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log") 
logging.basicConfig(filename=filename_logging, filemode='w', 
       level=logging.DEBUG) 
logging.info('Aye') 

如果我打開一個新的會話GVIM並運行該代碼與Python模式,那麼我會得到一個名爲「testlogging.log」與內容

INFO:root:Aye 

看起來很有前途!但是,如果我刪除日誌文件並再次以pythong模式運行代碼,那麼日誌文件將不會被重新創建。如果此時我在這樣的終端中運行代碼

./testlogging.py 

然後再次生成日誌文件!

我用Python文檔檢查,發現在日誌教程(https://docs.python.org/2.7/howto/logging.html#logging-to-a-file)這一行:

很常見的情況是,在一個文件中記錄的日誌記錄事件,所以讓我們來看看,明年。一定要嘗試以下在一個新開始的Python解釋器,並不只是從上述會話繼續:...

所以我想這個問題只記錄文件只更新一次有事情要做當我第二次運行代碼時,python模式保留在同一個解釋器中。所以我的問題是:有沒有辦法解決這個問題,通過擺弄日誌模塊,在代碼中放置一些東西來重置解釋器,或者通過告訴Python模式來重置它?

我也很好奇,爲什麼日誌模塊需要一個新開始翻譯工作...

感謝您的幫助提前。

回答

1

日誌文件未被重新創建,因爲日誌記錄模塊仍舊打開舊日誌文件並將繼續寫入(即使已刪除它)。解決的辦法是強制日誌模塊,再次在同一個解釋器運行代碼之前釋放所有獲取的資源:

# configure logging 
# log a message 
# delete log file 

logging.shutdown() 

# configure logging 
# log a message (log file will be recreated) 

換句話說,在你的代碼的末尾調用logging.shutdown(),然後你可以重新運行在相同的解釋器中,它將按預期工作(在每次運行時重新創建日誌文件)。

0

您以「w」模式打開日誌文件。 「w」表示從開始寫數據,所以你只看到了上次執行的日誌。

這就是爲什麼你在日誌文件中看到相同的內容。

你應該糾正你的代碼在第五到第七行以下。

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log") 
logging.basicConfig(filename=filename_logging, filemode='a', 
      level=logging.DEBUG) 

上面的代碼使用「a」模式,即追加模式,所以新的日誌數據將被添加到日誌文件的末尾。

+0

謝謝你的回答。但我的問題是,如果我在Python模式下第二次運行相同的代碼,日誌記錄不起作用並生成日誌文件;我的問題不是我想追加到日誌文件。我希望在第二次運行中看到相同的內容,但日誌文件根本不存在! – 2014-09-21 11:20:41