0

如何关闭控制台输出中的日志记录?我不想看到我的 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.
4

1 回答 1

0

我很惊讶 Java 没有内置这个功能(或者我找不到它现在有点像)......

System.outand分配System.err给一个不写任何东西(记录)的流。在 .NET 中有Stream.Null,它是一个没有后备存储的流,即流或无效流。

在 Java 中,这样的 aStream很容易通过扩展来构建java.io.OutputStream

class VoidStream extends OutputStream {
    @Override
    public void write(int b) throws IOException {
        // 
        // --------------
        // | void space |
        // --------------
        // 
    }       
}

现在,将 设置VoidStreamSystem.outSystem.err使用System.setOut()System.Err()导致一个空的控制台,

PrintStream ps = new PrintStream(new VoidStream());
System.setOut(ps);
System.setErr(ps);

理论上,一个警告是System.console(),因为它的输出流不能被设置,但可以作为printf()并且format()可以调用。幸运的System.console()是,仅当程序在终端中运行时才可用(否则它返回 null)并且谁仍在使用终端?;-)

于 2013-11-20T15:49:01.600 回答