首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows上的System.err在哪里?

Windows上的System.err在哪里?
EN

Stack Overflow用户
提问于 2010-01-18 00:11:50
回答 5查看 4.1K关注 0票数 3

我有一个基于Java的应用程序,它将一些诊断消息写入System.out和System.err。在Windows上运行时,这些消息输出在哪里?(例如,在Mac上,它们被打印到系统控制台日志中。)

编辑

我应该补充说,.exe应用程序被打包成一个java,所以(现在)我不能使用java启动它。(我想,我可以将各个.JAR文件复制到。)

而且,这是我继承的一个应用程序,以前没有使用过日志框架;我想修改它来使用它,但是我希望现在能得到一些日志输出来诊断一个问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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包)将消息捕获到日志中。

票数 2
EN

Stack Overflow用户

发布于 2010-01-18 03:45:30

实际上,您可以使用System.out和setErr()更改应用程序中的setout()setErr()点。

所以对于exmaple,如果您想转储到一个文件中,您可以这样做。

代码语言:javascript
复制
System.setOut(new PrintStream("output.txt"));
System.setErr(new PrintStream("err.txt"));

只要在main(String[] args)中这样做一次,你就可以走了。

票数 6
EN

Stack Overflow用户

发布于 2010-01-18 00:17:32

如果您使用java.exe启动java应用程序,它们将被写入控制台。如果您使用javaw.exe启动它,它们将无处可去,因为标准的in/out/err不会为GUI应用程序重定向。(您可以手动为javaw.exe创建子进程并重定向输出,但我认为这超出了范围)

我建议使用一些日志框架,并将消息写入日志文件。log4jjava.util.logging是个好的开始..。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2083211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档