java stderr去哪儿了?

时间:2009-03-16 11:02:52

标签: java c++ java-native-interface stderr

我想知道,java stderr在哪里标准化了?

我知道我可以使用System.setErr更改stderr,'重新分配“标准”错误输出流。',但我不知道,哪一个是“标准”。

我想更多地指出我的问题: 我有我在java(jni)中使用的C ++库。问题是看起来我无法看到来自我的C ++库的输出到stderr。我在C ++库中调用assert(),当我运行使用该库的java api时,在控制台中看不到输出。

6 个答案:

答案 0 :(得分:14)

它转到过程的标准错误流,无论设置是什么。

  • 如果从控制台运行应用程序,它也可能会写入控制台。
  • 在GUI中,标准输出/错误通常被删除,即输出丢失。
  • 在服务(例如Web服务器)中,标准错误/输出通常在某个地方的旋转日志文件中捕获,但它完全取决于服务。

大多数平台允许您将标准错误流重定向到其他位置(例如,重定向到文本文件)。

System.setErr的想法是允许使用进程本身的标准错误流,但更改它以便对System.err.println等的调用转到给定的流

答案 1 :(得分:3)

默认情况下,System.err是控制台,就像System.out。

一样

答案 2 :(得分:2)

来电者的文件描述符2。从哪里开始 - 取决于来电者。 在控制台上,您可以将其重定向到其他位置,例如:

java Example 2>> errors.log

答案 3 :(得分:0)

我刚刚编写了一个执行System.err.println的小测试程序,它似乎会输出到控制台。

答案 4 :(得分:0)

这应该转到java.io.FileDescriptor.err http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileDescriptor.html

System.setErr(new PrintStream(new BufferedOutputStream(new FileOutputStream(java.io.FileDescriptor.err),128),true));

答案 5 :(得分:-1)

标准错误输出流进入控制台。此流已打开并准备接受输出数据。

有关详细信息,请参阅java sun api