我有一个基于Java的应用程序,它将一些诊断消息写入System.out和System.err。在Windows上运行时,这些消息输出在哪里?(例如,在Mac上,它们被打印到系统控制台日志中。)
编辑
我应该补充说,.exe应用程序被打包成一个java,所以(现在)我不能使用java启动它。(我想,我可以将各个.JAR文件复制到。)
而且,这是我继承的一个应用程序,以前没有使用过日志框架;我想修改它来使用它,但是我希望现在能得到一些日志输出来诊断一个问题。
发布于 2010-01-18 00:18:25
这取决于您如何启动应用程序。例如,如果要从windows命令行提示符(例如java -jar myApp.jar)启动GUI,那么System.out和System.err都会转到控制台。如果您是通过Windows本身启动的(例如,双击可执行的JAR ),那么据我所知,这些错误流将丢失。将应用程序的执行设置为服务(无论在您的情况下它听起来多么不可能)也会丢失输出流。
在put和output流中使用标准通常不是一个好主意,除非您希望在shell脚本类型的环境中调用您的程序,在这种环境中,这些是公共的通信通道。正如您自己已经发现的,这些通常在GUI环境中没有很好的定义。如果您确实希望在程序运行时捕获文本信息,请考虑使用“真实”日志框架(如log4j或java.util.logging包)将消息捕获到日志中。
发布于 2010-01-18 03:45:30
实际上,您可以使用System.out和setErr()更改应用程序中的setout()和setErr()点。
所以对于exmaple,如果您想转储到一个文件中,您可以这样做。
System.setOut(new PrintStream("output.txt"));
System.setErr(new PrintStream("err.txt"));只要在main(String[] args)中这样做一次,你就可以走了。
发布于 2010-01-18 00:17:32
如果您使用java.exe启动java应用程序,它们将被写入控制台。如果您使用javaw.exe启动它,它们将无处可去,因为标准的in/out/err不会为GUI应用程序重定向。(您可以手动为javaw.exe创建子进程并重定向输出,但我认为这超出了范围)
我建议使用一些日志框架,并将消息写入日志文件。log4j或java.util.logging是个好的开始..。
https://stackoverflow.com/questions/2083211
复制相似问题