我写了一个复杂的应用程序,现在我必须在一些测试人员的帮助下调试它。我现在面临的问题是他们无法知道在使用软件期间发生了什么样的异常。当用户使用应用程序或小程序时,是否有快速获取控制台流并在另一个窗口中显示消息的方法?
答案 0 :(得分:1)
使用slf4j和logback等日志记录框架。它提供了许多不同的“appender” - 帮助程序,可以在不同的地方保存日志消息。
对于您的用例,我建议编写一个新的appender来收集线程安全列表中的最后100条消息。
将其附加到根记录器(参见文档)。
记录错误或异常时,从列表中获取所有消息并将其转换为字符串。使用logback
,create an encoder时。
加入字符串并在文本编辑器窗口小部件中显示它们,以便客户可以轻松地将邮件剪切并粘贴到电子邮件中。
或者,您可以尝试现有的邮件追加器。将其配置为仅响应错误并让错误直接发送给您。但我建议你确保你的邮件提供商可以处理这个问题 - 我们有一个案例,软件中的错误导致过夜发送超过70,000封邮件。之后,我们了解到Outlook无法处理这么多邮件。
答案 1 :(得分:1)
您可以在应用程序启动时将所有控制台消息重定向到文件(或其他流),然后查看文件内容以获取异常:
FileOutputStream fos = new FileOutputStream("log.txt");
PrintStream out = new PrintStream(fos);
System.setOut(out);
System.setErr(out);
System.out.println("Logged to file");