我有一個遺留的PSVM應用程序,我希望將其日誌記錄輸出重定向到每次執行的唯一文件。因此,如果我在10:00調用它,請將其輸出重定向到{thread-id} -10:00.log;另一個執行線程可能在10:01開始執行,其輸出將轉到{thread-id} -10:01.log。我明白這不是優雅的。動態創建和銷燬日誌appender
我的問題是:
- 這可能嗎?
- 有人有一個想法如何處理?
- 是否有可能釋放/摧毀一個appender,當它不再需要?
謝謝!
我有一個遺留的PSVM應用程序,我希望將其日誌記錄輸出重定向到每次執行的唯一文件。因此,如果我在10:00調用它,請將其輸出重定向到{thread-id} -10:00.log;另一個執行線程可能在10:01開始執行,其輸出將轉到{thread-id} -10:01.log。我明白這不是優雅的。動態創建和銷燬日誌appender
我的問題是:
謝謝!
我會從FileAppender開始,並從中創建你自己的。只需修改您的版本即可獲取當前的線程ID,並在創建之前爲文件附加適當的線程ID /時間戳。你會保持(說)在線程ID上鍵入的(緩衝)FileWriters的地圖。
寫作appenders是相當微不足道 - here's a Javaworld guide如何做到這一點。
在上述內容中,您的程序是否有可能在一分鐘內啓動兩次?你想附加一個進程ID或類似的維護唯一性?
這是不可能的,至少在log4j中不容易做到。然而,如果你看看SiftingAppender與logback(log4j的後繼者)一起發貨,它被設計爲處理在運行時標準上創建appender以及在不再需要時刪除appender。
如果您的應用程序需要爲每個應用程序啓動創建一個日誌文件,您可以簡單地根據時間戳命名您的日誌文件。如果您需要進一步的幫助,請在logback-user郵件列表上留言。
我很想知道爲什麼這是不可能的。這似乎相對簡單。我跟進了一篇發佈到logback-user的文章。我希望你能在那裏找到並詳細說明。謝謝! – 2009-08-07 20:32:08
這取決於您是否希望以編程方式或通過配置文件配置自定義appender。還有在多線程應用程序中管理日誌文件(每個線程一個)的問題。 對於這兩個問題,原始問題並不是非常具體。 – Ceki 2009-08-07 20:50:35
感謝您的快速回答!一個線程不會多次執行它。但是,無論如何,這只是一個討論的例子。該名稱將被限定爲唯一性。 關於如何釋放文件編寫器的任何想法? – 2009-08-06 14:41:55
+1好教程鏈接 – WolfmanDragon 2009-08-06 14:52:22
Re。釋放。我認爲你應該在每條日誌消息之後刷新作者(以確保寫入磁盤),並且不用擔心將其釋放。讓JVM把一切都放下。除非你寫了很多線程並且打開了很多文件。那麼你可能只想讓'n'作家立即打開,並在沒有登錄時關閉一些作家。這可能會導致一些顛簸,但是:-) – 2009-08-06 15:13:03