2013-03-21 23 views
1

爲我檢查了Python的文檔在python logging,並與一些實驗,我不太下架,小時日誌轉/ Django的

當計算下一次翻轉時,第一次(當處理程序已創建)時,將使用現有日誌文件的最後修改時間或當前時間來計算下一次旋轉的發生時間。

我發現旋轉時間爲每小時旋轉由我開始記錄時間的影響,說12點23分33秒開始,接下來在旋轉13時23分33秒,這最終將是混亂的日誌文件名。

代碼會是什麼樣子,

TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False) 

任何方式強制每小時日誌旋轉從00分鐘開始像13時00分零零秒,而不是時間的開始記錄,每個記錄將只包含日誌在一小時內其日誌文件名稱表明?

回答

0

我也重視另一個答案。 Python日誌記錄支持WatchedFileHandler,如果它發現文件信息已更新,它將關閉並重新打開具有相同文件名的日誌文件。它可以很好地與系統級日誌旋轉一樣,如linux logrotate守護進程。

2

看代碼爲TimedRotatingFileHandler,你不能強迫它在特定分鐘值旋轉:根據文件,將在任logfile last modification time + interval如果日誌文件已經存在,如果它不」發生下一次翻轉,或current time + interval噸。

但既然你似乎知道文件名,您可以通過日誌文件的最後修改時間第一次設置爲當前小時欺騙TimedRotatingFileHandler

from datetime import datetime 
import os, time 

thishour = datetime.now().replace(minute = 0, second = 0, microsecond = 0) 
timestamp = time.mktime(thishour.timetuple()) 

# this opens/creates the logfile... 
with file(filename, 'a'): 
    # ...and sets atime/mtime 
    os.utime(filename, (timestamp, timestamp)) 

TimedRotatingFileHandler(filename, ...) 

(未經測試)

+0

是的,我一定會嘗試一下,謝謝。 – 2013-03-21 13:03:51