2013-08-19 56 views
6

我有一個控制檯應用程序,它使用Log4J打印其輸出。這很有用,因爲我可以輕鬆實現一個交換機,以選擇性地顯示調試消息,即使它們默認爲隱藏。控制檯上使用Log4J或LogBack的進度條

此應用程序有一些長時間運行的動作,其中進度條將是適當的。

什麼是使用Log4J或LogBack執行此操作的最佳方法?

+0

我不明白這個問題。你將如何在日誌條目中顯示進度條?如果您已經知道進度,爲什麼不打印xx%完成? – ChrisM

回答

3

要向控制檯寫入進度條或任何類型的更新文本,只需使用\r(回車)而不是\n(新行)結束輸出,以便下一行覆蓋它。這question更詳細。使用F-ANSI庫可以輕鬆生成漂亮的控制檯輸出,包括覆蓋上一行。

但是,如果你設置使用日誌框架,這不僅是不可能的,但它不是你想要的。正如ChrisM所建議的那樣,正確的方法就是每隔一段時間記錄一個新的行,並用到目前爲止的完成百分比。這樣,你就可以看到你的程序正在做什麼以及它的背景有多遠。

它聽起來像你想要做的是將你的日誌記錄從你的程序的實際輸出中分離出來(這通常是一個好主意,甚至不考慮進度條問題)。使用您的日誌框架記錄有關程序執行的信息;你或者某人正在調試的東西會感興趣。實際程序的輸出應通過System.out直接寫入stdout

然後你可以單獨決定你想要做什麼你的日誌。它也可以寫入stdout,你的日誌和輸出可以一起生活,但是更好的辦法是寫入stderr(這會讓它更容易重定向)或日誌文件(這會使你的程序輸出變得更清潔,並且保持你的日誌稍後參考)。


此外,如果Java是不是pv命令提供基於通過它的管道的數據量的有力的,可定製的進度條的先決條件。