如何关闭控制台输出中的日志记录?我不想看到我的Java程序的输出:
Nov 01, 2013 12:01:29 PM org.glassfish.tyrus.server.ServerContainerFactory create
INFO: Provider class loaded: org.glassfish.tyrus.container.grizzly.GrizzlyEngine
Nov 01, 2013 12:01:29 PM org.glassfish.grizzly.http.server.NetworkListener start
INFO: Started listener bound to [0.0.0.0:8029]
Nov 01, 2013 12:01:29 PM org.glassfish.grizzly.http.server.HttpServer start
INFO: [HttpServer] Started.
Nov 01, 2013 12:01:29 PM org.glassfish.tyrus.server.Server start
INFO: WebSocket Registered apps: URLs all start with ws://localhost:8029
Nov 01, 2013 12:01:29 PM org.glassfish.tyrus.server.Server start
INFO: WebSocket server started.
答案 0 :(得分:0)
我很惊讶Java没有使用这个功能(或者我现在找不到它是同样的东西)......
将System.out
和System.err
分配给不写任何内容的流(记录)。在.NET中,Stream.Null是一个没有后备存储的流,即 null 流或 void 流。
在Java中,通过扩展Stream
:
java.io.OutputStream
class VoidStream extends OutputStream {
@Override
public void write(int b) throws IOException {
//
// --------------
// | void space |
// --------------
//
}
}
现在,使用VoidStream
和System.out
将System.err
设置为System.setOut()
和System.Err()
,从而产生一个空的控制台,
PrintStream ps = new PrintStream(new VoidStream());
System.setOut(ps);
System.setErr(ps);
理论上,一个警告是System.console()
,因为无法设置其输出流,但可以调用printf()
和format()
作为函数。幸运的是,System.console()
仅在程序在终端(otherwise it returns null)中运行且谁仍在使用终端时才可用? ; - )