2016-04-12 34 views
0

我正在使用ConcurrentLogHandler將我的Python應用程序日誌消息記錄到文件中。 Tornado的HTTPServer作爲服務器在生產中使用,並且在某些情況下(用戶表單提交),我想強制翻轉文件。 我遇到的問題是,當運行logger.handlers [0] .doRollover()時,翻轉不會發生,並且我也看不到錯誤。Python ConcurrentLogHandler:與Tornado HttpServer一起使用時強制翻轉

我的許多應用程序模塊導入「記錄」對象從以下模塊寫入日誌:

import logging 
import logging.handlers 
from cloghandler import ConcurrentRotatingFileHandler 
from my_app import app 

logger = logging.getLogger('my_app') 
hdlr = ConcurrentRotatingFileHandler(app.config['LOG_PATH'], maxBytes=5e+8, backupCount=10) 
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr) 
logger.setLevel(logging.INFO) 

此前使用ConcurrentLogHandler,我用的是RotatingFileHandler,並執行logger.handlers [ 0] .doRollover()會導致在堆棧中的os.rename上觸發「文件忙」錯誤。

有沒有一種方法可以強制使用此設置進行翻滾,或者爲了使其成爲可能,我是否應該進行更改?我使用Centos作爲服務器,因此文件系統是UNIX/Linux。我可以在應用程序運行時隨時在日誌文件上看到[filename] .lock文件。

謝謝

回答

0

ConcurrentLogHandler可以通過logger.handlers [0] .doRollover()確實被結轉。我遇到的問題是我之前使用了RotatingLogHandler,並且一個.lock文件留在日誌的目錄中,從而阻止它被翻轉。刪除鎖定文件並將ConcurrentLogHandler保留爲選擇的處理程序(而不是RotatingLogHandler)可解決此問題。