使用Log4J或LogBack在控制台上的进度条

Axe*_*ine 6 java logging log4j console-application logback

我有一个控制台应用程序,使用Log4J打印其输出.这很有用,因为我可以轻松地实现一个开关,也可以显示调试消息,即使它们默认是隐藏的.

此应用程序有一些长时间运行的操作,进度条适合.

使用Log4J或LogBack实现此目的的最佳方法是什么?

dim*_*414 3

要将进度条或任何类型的更新文本写入控制台,只需以\r(回车符)而不是\n(换行符)结束输出,以便下一行覆盖它。这个问题更详细。F-ANSI库使您能够轻松生成美观的控制台输出,包括覆盖前一行。

但如果您决定使用日志框架,这不仅不可能,而且也不是您想要的。正如 ChrisM 所建议的,记录进度的正确方法是每隔一段时间就记录一个新行,并记录到目前为止完成的百分比。这样,您就可以看到您的程序正在做什么以及它在上下文中的进展情况。

听起来您想要做的是将日志记录与程序的实际输出分开(这通常是一个好主意,甚至忽略进度条问题)。使用日志框架记录有关程序执行的信息;您或调试人员可能感兴趣的东西。实际程序的输出应直接写入stdoutvia System.out

然后,您可以单独决定要如何处理日志记录。它也可以写入stdout,并且您的日志和输出可以一起存在,但更好的是写入stderr(这使得重定向更容易)或日志文件(这使得您的程序的输出更清晰,并保留您的日志以供参考之后)。


此外,如果 Java 不是先决条件,该pv命令会根据通过它传输的数据量提供强大的、可定制的进度条。