如何在Java Swing应用程序中编写日志并实时显示?

3

我创建了一个使用类执行某些任务的GUI程序。

我想在JFrame和类中添加日志记录。日志应该保存在文件中,并同时显示在JTextArea中。

有什么方便的解决方案吗?


关于日志记录,可以尝试使用log4j - mre
1
你目前做了什么?听起来你需要选择你最喜欢的日志框架(java.util.logging或log4j),并将其包装在一些类/实例中,以便简单地写入到你的JTextArea - pickypg
请查看https://dev59.com/NGDVa4cB1Zd3GeqPgLpR#33657637。 - Rod Lima
3个回答

7
创建一个包装器,它可以:
  1. 更新您的JTextArea
  2. 通过log4j, SLF4JApache Commons Logging或其他日志框架进行日志记录
public void log(String msg) {
      appendToJTextArea(msg);
      LOG.info(msg);
 }

为什么不直接“使用PrintStream写入文件”呢? - Martijn Courteaux
因为日志记录框架除了做记录之外什么也不用做。此外,您可以轻松自定义它,启用/禁用它,创建自定义的附加器/记录器,具有不同的日志级别,等等。那么为什么要重新发明轮子呢? - dertkw

4
我建议使用简单的System.out.println()语句,并以以下方式运行您的应用程序:
java -cp path/to/my/class/or/jar/MyClass.class MyClass -debug > myLog.log

该命令将为您创建文本窗格(使用 -debug 参数),并将它们放入日志文件中。


4
来吧,这太荒谬了!日志框架易于使用,如果你不知道它们,学习它们对未来是一种投资。System.out.println()适用于HelloWorld或调试日志框架问题,但不适用于真正的应用程序。请参考timbooo的答案,描述一个包装类。 - Thor
@Thor:确实,真正的应用程序不应该这样工作。但我给了一个+1,因为有一个简单的替代方案,使用已经存在的东西。我不知道这个选项。是的,我也给了timbooo一个+1。 - Martijn Courteaux
@Thor,我完全理解日志记录,我已经在Objective-C中为此制作了自己的框架。然而,我的意思是这应该是一种简单的方式,让OP记录数据,而不需要额外编写代码。 - Richard J. Ross III

0

你可以轻松地使用FileWriter来将日志记录到文件中的其中一种方式:
http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileWriter.html

此外,当你记录数据时,你可以始终使用JTextArea.append()来更新JTextArea的文本:
http://download.oracle.com/javase/1.4.2/docs/api/javax/swing/JTextArea.html

如果你要将日志记录到文件中,我建议你将其记录为多个带有时间戳的文件。这样可以确保你保存了数据,并且在程序崩溃时不会丢失太多的数据。

希望这对你有帮助!


那些链接指向的是旧版本的Java。 - jzd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接