1. 程式人生 > >python程序寫檔案與多程序記錄日誌

python程序寫檔案與多程序記錄日誌

假設有個程序,一直在寫一個名字叫做1的檔案,然後我們在它執行的過程中將檔案改名了,會發生什麼事情呢?

寫個程式試試:


然後執行它,此時可以看到:


因為程序得到了檔案的控制代碼,所以就算這個檔案改名為2了,它也會繼續往2這個檔案寫入的。

這樣也就解釋了apache在linux啟動多個程序響應url請求時,呼叫TimeRotatingFileHandler時,第二個程序把第一個程序的日誌名錯誤改名為帶字尾的檔名,第一個程序也會依舊往帶字尾的檔案裡寫入後續的日誌。所以看起來xxx.log和xxx.log.20160417都不停的有18號的日誌寫入。

所以django在linux下多程序使用TimeRotatingFileHandler寫日誌會有問題。

目前看來,有2種方法處理多程序寫日誌的問題:

1.程序id加到檔名中,但是apache重啟時子程序id也會變;這樣可能存在多個非當天的日誌但不帶時間字尾(程序id不一樣)

2.使用concurrentlog第三方庫記錄日誌,下載地址:

https://pypi.python.org/pypi/ConcurrentLogHandler/0.9.1

經過和同事交流,得知一個多程序按日期寫日誌的庫。向作者致敬:

https://github.com/kieslee/mlogging