2016-10-03 41 views
0

我有在Linux系統下運行並使用log4js日誌庫的Node.js應用程序。日誌文件由Linux滾動系統每日滾動。問題如下:有人知道如何強制log4js重新創建和使用原始日誌文件時,它以某種方式重命名? 注意,Log4js繼續將日誌寫入重命名的文件中(看起來,流描述符被保留)。 請注意,我不想使用log4js DaylyRollingFileAppender,因爲我的日誌文件夾包含由各種語言(Java,Python,JavaScript,Bash ...)生成的日誌文件。當日志文件按OS進行滾動時,Node.js日誌記錄會出現問題。

回答

0

我假設您使用logrotate

您可以嘗試在logrotate配置文件中使用'reload'指令。 (詳情請見:http://www.linuxcommand.org/man_pages/logrotate8.html

好像那樣log3js可以處理SIGHUP。 (問題:https://github.com/nomiddlename/log4js-node/issues/343,拉請求:https://github.com/nomiddlename/log4js-node/pull/403

次要的解決方案是將其配置爲使用'copytruncate'指令,但它有取捨: https://serverfault.com/questions/688658/rsyslog-with-logrotate-reload-rsyslog-vs-copytruncate

+0

感謝您的回答。哦,'copytruncate'當然是解決方案,但它對性能的衝擊,因爲我的應用程序在大負載下工作,並且日誌增長到幾GB。因此,Linux的滾動持續了一段時間,機器負載達到了8-10。因此,我的應用程序實際上是在這個時候掛起的。總之,我試圖避免使用'copytruncate'。 – user1856533

+0

好像他們現在處理SIGHUP信號,你可以嘗試'重新加載'指令。看到這個問題:https://github.com/nomiddlename/log4js-node/issues/343。並拉請求:https://github.com/nomiddlename/log4js-node/pull/403。可能它不在npm中。在這種情況下,你可以(臨時)直接從git安裝。 – teq

+0

如果我的回答對您有幫助,請將其標記爲「已接受」 – teq