2017-10-05 254 views
1

當我處於開發模式時,通常會清除日誌文件,並且我需要重新開始只關注必須測試的內容。Logback在清除日誌文件後停止日誌記錄

如果我在linux中清除日誌文件(還沒有測試Windows),logback會停止寫入該文件 也許這是關於Linux中的開放處理程序和文件描述符。

如何在不重新啓動應用程序的情況下恢復情況? 是否有可以自動恢復這種情況的appender?

+0

什麼 - 特別是 - 「清除文件」是什麼意思?這是否意味着從文件中刪除一些數據?這是否意味着刪除一個文件? – glytching

+0

您應該截斷文件而不刪除它。好例子(truncate,noclobber)在這裏:https://stackoverflow.com/questions/2423281/how-to-empty-truncate-a-file-on-linux-that-already-exists-and-is-protected-i – riskop

回答

0

當你的應用程序運行時(和的logback內您的應用程序已打開的句柄到日誌文件)...

  • 您將無法刪除Windows上的文件
  • 你會能夠刪除Linux上的文件,但就Logback而言,該文件依然存在,直到Logback關閉該打開的文件句柄。因此,Logback不會知道該文件已被刪除,但由於文件已將刪除,因此Logback實際上無法將任何內容寫入磁盤,直到Logback重新初始化(並且您的FileAppender重新創建該文件)爲止。通常,這將在應用程序啓動時完成。

有一個針對Logback的open issue,要求Logback在這種情況下的行爲發生變化。

如果您的目標是讓日誌輸出專注於最近的活動,那麼您可以定義一個最小大小且沒有歷史記錄的滾動文件appender來保存(例如)最後1MB的數據,這個可能有助於提供一些關注最近的事件只有

或者,你必須:

  • 投票this issue
  • 使用grep/awk來找到你的日誌文件中的相關問題(你可以很容易的grep時間戳),即使他們是在一個包含最近幾小時日誌事件的日誌文件
  • 通過編寫一個簡單的腳本來完成在這種情況下重新啓動應用程序的負擔:(1)停止應用程序; (2)刪除日誌文件; (3)啓動應用程序