問題:
最近用nodejs+express寫了一個WebServer類應用。其中使用pm2 cluster模式進行進程管理,nodejs代碼中,使用winston-daily-rotate-file進行log記錄。其中winston-daily-rotate-file配置如下:
所以問題來了,發現其中maxFiles設置不起作用,winston-daily-rotate-file並沒有刪除多餘的日誌文件。
原因:
查看了一下winston-daily-rotate-file的源代碼,發現新版的winston-daily-rotate-file使用file-stream-rotator進行文件rotation的管理,其中file-stream-rotator把所產生的的文件信息放入和文件同目錄下的.audit.json中:
其中內容類似如下:
因爲pm2的cluster模式會根據cpu的核數,啓動多個進程,但是winston-daily-rotate-file的配置,導致多個進程共享一個同一個目錄(也就是./logs),這會導致.audit.json相互覆蓋,從而丟失了一些日誌文件的記錄信息,因此file-stream-rotator無法對他們進行管理。
解決方案:
1,每個進程應該有自己的log文件夾,這樣不會產生.audit.json覆蓋的問題
2,要考慮重啓的問題,所以每個文件夾的名稱要相對穩定,每次重啓時,新的進程還是可以找到已經創建的.audit.json文件,使得file-stream-rotator可以讀取這些已經創建的日誌的文件信息,並對他們進行管理,所以winston-daily-rotate-file的配置如下: