您如何不从 Java 应用程序输出到 stderr?

How do you not output to stderr from a Java app?

我怎么会不小心从 Java 应用程序输出到 stderr?我刚刚读到这个:

http://tutorials.jenkov.com/java-io/system-in-out-error.html

这似乎输出到标准输出:

System.out.println("File opened...");

并将此发送到标准错误:

System.err.println("File opening failed:");

我从来没有故意输出到 System.err,但我想知道 Java 中的某些函数是否会自动执行此操作?也许当抛出异常时?

我这样做是因为我设置了 Supervisord 来启动和监控我的 Java 应用程序,我的应用程序发出一些启动消息,并且 Supervisord 将一些消息记录到 stdout 日志,但其他消息记录到 stderr 日志。我想知道如何控制它。 stderr 中的大部分内容是我希望应用程序发出的启动消息。它们应该在标准输出日志中。

我最初将这个问题发布到 Whosebug,我最初将其表述为关于日志的问题,所以我被告知它必须转到 ServerFault。所以我把它重新发布到 ServerFault,但没有得到任何回应,主要是因为我认为这确实是一个应用程序问题。您可以在此处查看有关 ServerFault 的问题:

https://serverfault.com/questions/711199/how-would-i-tell-supervisord-that-these-messages-dont-belong-in-stderr

您可以使用:http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#setErr%28java.io.PrintStream%29

只需制作一些模型 class,除了遵循 PrintStream 接口什么都不做,您就可以开始了。

当抛出异常但未捕获时,线程级 uncaught exception handler 会处理它。如果您已指定 none,则使用默认值。 JLS 不指定默认处理程序。但是 oracle 的默认处理程序打印到 stderr。所以这是一种无需使用 System.err

即可获得 stderr 输出的方法