8

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

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

我想详细说明我的问题:我有在 java (jni) 中使用的 C++ 库。问题是我似乎看不到来自我的 C++ 库的 stderr 输出。当我运行使用该库的 java api 时,我在 C++ 库中调用 assert() 并且在控制台中看不到输出。

4

6 回答 6

14

它进入流程的标准错误流,无论设置如何。

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

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

System.setErr 的想法是允许您使用进程本身的标准错误流,而是对其进行更改,以便对System.err.printlnetc 的调用转到给定的流。

于 2009-03-16T11:07:41.107 回答
3

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

于 2009-03-16T11:06:18.380 回答
2

调用者的文件描述符 2。它从那里去哪里——取决于调用者。在控制台上,您可以将其重定向到其他地方,例如:

java Example 2>> errors.log
于 2009-03-16T11:09:53.067 回答
0

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

于 2009-03-16T11:08:24.257 回答
0

这应该去 java.io.FileDescriptor.err https://docs.oracle.com/javase/1.5.0/docs/api/java/io/FileDescriptor.html

System.setErr(new PrintStream(new BufferedOutputStream(new FileOutputStream(java.io.FileDescriptor.err),128),true));
于 2009-03-16T11:10:01.820 回答
-1

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

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

于 2009-03-16T11:07:18.253 回答