如何在pm2 cluster模式下,使用winston-daily-rotate-file

問題:

最近用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的配置如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章