我怎么会意外地从Java应用程序输出到stderr?我刚刚读到这个:
http://tutorials.jenkov.com/java-io/system-in-out-error.html
这似乎输出到stdout:
System.out.println("File opened...");
这是stderr:
System.err.println("File opening failed:");
我从未故意输出到System.err,但我想知道Java中的某些函数是否会自动执行此操作?也许当抛出异常时?
我之所以这样,是因为我设置了Supervisord来启动和监控我的Java应用程序,我的应用程序会发出一些启动消息,而Supervisord会将一些消息记录到stdout日志中,而其他消息则记录到stderr日志中。我想知道如何控制这个。 stderr中的大多数内容都是我希望应用程序发出的启动消息。它们应该在stdout日志中。
我最初将这个问题发布到StackOverflow,我最初将其称为关于日志的问题,所以我被告知它必须转到ServerFault。所以我将它重新发布到ServerFault,但它没有得到任何响应,主要是因为我认为它确实是一个应用程序问题。您可以在此处查看ServerFault上的问题:
答案 0 :(得分:1)
您可以使用:http://docs.oracle.com/javase/6/docs/api/java/lang/System.html#setErr%28java.io.PrintStream%29
只需制作一些模拟类,除了遵循PrintStream接口之外什么都不做,你就可以了。
答案 1 :(得分:0)
当抛出异常并且未捕获异常时,线程级uncaught exception handler会处理它。如果您指定了none,则使用默认值。 JLS未指定默认处理程序。但是oracle的默认处理程序打印到stderr。这是一种在不使用System.err