2012-04-02 58 views
4

我在apache環境中運行我的python應用程序並使用timedRotatingFileHandler進行記錄。 我有設置記錄器的方式,它應該每天午夜旋轉。我的所有進程寫入同一個記錄器文件。不知何故,記錄器有時缺少記錄信息。有時我會看到記錄器同時寫入兩個文件(舊文件和旋轉文件)。Python TimedRotatingFileHandler - 日誌丟失

我無法理解爲什麼會發生這種情況? TimedrotatingFileHandler不能在多進程環境中工作嗎?如果不是這樣,爲什麼呢?

請幫我瞭解..

+0

你有多個python進程寫入相同的日誌文件嗎?什麼是你的設置,什麼是日誌配置? – 2012-04-02 12:28:16

+0

是的,我所有的程序都會寫入同一個文件。 – leela 2012-04-03 03:34:41

回答

4

您無法登錄(和旋轉)來從多個進程天真相同的文件,因爲OS不知道如何序列寫入和2個不同的工藝循環指令。您正在經歷的事情被稱爲競爭條件,因爲2個進程正競爭寫入同一個文件並關閉它,並在輪換時間同時打開一個新的文件句柄。旋轉時只有1個進程會贏得新的文件句柄,以便可以解釋缺失的日誌事件。

下面是Python文檔中有關如何登錄到同一位置的提示。

http://docs.python.org/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes

從本質上講,你會希望有一個單獨的進程偵聽來自多個地方來記錄事件,然後這個過程將記錄事件到一個文件中。您也可以在該偵聽器進程中配置循環。

如果您不確定如何編寫此文件,您可以嘗試使用包裝,例如Sentry或Facebook的Scribe。我推薦Sentry,因爲Scribe並不是無關緊要的。