2013-11-20 46 views
0

我有一個瓶子的web應用程序,我試圖去登錄到一個文件。獲取一個類的多個實例使用Python日誌與瓶登錄到一個文件

每個頁面訪問實例化一個新的類,所以我試圖將每個類的記錄器鏈接到模塊記錄器,以便他們都登錄到相同的文件。

兩個問題:

A)這樣會造成文件寫入衝突,如果這些類的多個實例都記錄在同一時間?我想不是,因爲他們通過模塊級記錄器。我是否正確創建了這個?

B)我的logfile.log文件中沒有顯示任何內容。我不確定問題出在哪裏。

from bottle import route, run 
import logging 

logger = logging.getLogger('server') 
fh = logging.FileHandler('./log/logfile.log') 
fh.setLevel(logging.ERROR) 
logger.addHandler(fh) 

class userclass: 
    def __init__(self,name): 
     self.logger = logging.getLogger('server.userclass') 
     self.name = name 
     try: 
      raise Exception("Uh oh!") 
     except Exception as e: 
      self.logger.error("There's a problem.") 
      return 

@route('/<name>') 
def user(name): 
    newuser = userclass(name) 

run(host='localhost', port=8080, debug=True) 
+0

Python可能是懶惰的日誌文件,而不是沖洗它。試着優雅地關閉進程並_then_檢查日誌文件 –

+0

試圖停止進程,然後檢查文件...仍然沒有。 –

+2

我在我的系統上試過了,它按預期工作:日誌中包含一個「出現問題。」爲每個匹配請求。我複製並粘貼了問題中的代碼,然後創建了一個「log」子目錄,然後運行腳本。 (Python 2.7,Ubuntu)。我不得不改變8000端口,但我沒有做任何其他改變。 –

回答

0

替換:

logger = logging.getLogger('server') 
fh = logging.FileHandler('./log/logfile.log') 
fh.setLevel(logging.ERROR) 
logger.addHandler(fh) 

有:

logging.basicConfig(level=logging.ERROR, filename='./log/logfile.log') 

您需要與logging.basicConfig()函數首先啓動記錄器。這將在根記錄器中創建一個基本配置,通過logging.getLogger()獲得的所有其他記錄器都將使用此基礎 - 您可以隨時爲這些新日誌添加處理程序,更改其格式,甚至是其級別 - 但是您需要先調用基本配置在根記錄器上。

+1

不應該調用'basicConfig' * - OP的代碼看起來沒問題,只是在記錄器上沒有設置任何級別(所以它默認爲'WARNING',但是它也應該會接收'ERROR'事件) –

+0

謝謝。只需確認,它就設置了baseConfig,然後按照這個順序調用getLogger? logging.basicConfig(level = logging.ERROR,filename ='./log/logfile.log') logger = logging.getLogger('server') –

+0

嘗試以該順序仍然沒有任何文件... –

相關問題