当前位置: 首页 > 知识库问答 >
问题:

我可以将控制台输出镜像到网站吗?

邢晗日
2023-03-14

有没有什么方法可以将控制台输出镜像到java中的localhost,甚至可以添加一些不错的CSS。如果同一网络中的其他设备也能到达控制台,那就太酷了。我做了很多关于这个主题的研究,但没有找到任何关于这个的网站/线程/问题。帮助将不胜感激!

共有1个答案

柴泰平
2023-03-14

为了拦截正常发送到控制台(或标准输出)的输出,您需要在代码中的某个地方使用以下API:

System.setOut(myStream); 
System.setErr(myStream); //If you want to grab the error stream also. Could go do a different location

许多日志库已经可以为您执行此操作。但这基本上就是您需要捕获输出的方式。“myStream”的实际功能取决于您。将其发送到上的web服务器的最快路径http://localhost:8888是将输出定向到一个文件并启动JDK的嵌入式web服务器。以下是您应该能够运行的示例:

package test.example;

import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpServer;

import java.io.OutputStream;
import java.io.PrintStream;
import java.net.InetSocketAddress;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.Instant;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class SystemOutToWeb
{
    public static void main(String... args ) throws Exception
    {
        final Path myOutputFile = Paths.get("./MyOutputFile.txt");
        final PrintStream myStream = new PrintStream(myOutputFile.toFile());

        System.out.println("Going to redirect to : " + myOutputFile.toAbsolutePath());

        System.setOut(myStream);
        System.setErr(myStream);

        System.out.println("Starting the Output");

        //Have something that logs every 5 seconds
        final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        scheduler.scheduleAtFixedRate(() ->
        {
            System.out.println("Hello - the time is now " + Instant.now());
        }, 1, 5, TimeUnit.SECONDS);

        // Start the simple Java Built in Web Server.
        final HttpServer http = HttpServer.create(new InetSocketAddress(8888), 0);
        final HttpContext context = http.createContext("/");
        context.setHandler(exchange ->
        {
            byte[] data = Files.readAllBytes(myOutputFile);
            exchange.sendResponseHeaders(200, data.length);
            OutputStream os = exchange.getResponseBody();
            os.write(data);
            os.close();
        });
        http.start();

    }
}

如果您给它几秒钟的时间运行,那么您应该能够在http://localhost:8888.

当然,这只是起点。例如,你可以一起使用不同的网络服务器,或者用一些CSS进一步增加这个资源(甚至可以使用网络套接字在文件更新时将其流式传输)。

 类似资料:
  • 在带有Java配置的ftp出站网关的Spring集成文档示例(16.8.1)中,如何将应答通道的有效负载记录到控制台?

  • 我试图使用django附带的开发Web服务器(manage.py runserver 0.0.0.0:8000)捕获到控制台的传入连接的IP地址。现在,我收到以下请求输出: 有没有办法在其中获取传入的客户端IP地址?例如,使其看起来像以下内容?

  • 我正在使用Windows上的Eclipse IDE(氧气)学习Java(SE8)。我以前做过一些“业余”编程,但这是我第一次正式上这门课。我希望能够在普通控制台(System.out.println)中打印分配所需的输出,并同时在不同的控制台中打印正在发生的信息文本。 printToConsole1(“普通程序输出”);printToConsole2(“幕后信息”); 我可以在Java中做类似的事

  • 当JMeter以非gui模式启动时,它显示了控制台上的一些日志,如下所示 但实际的测试执行日志会写入一个名为jmeter的单独日志文件。日志,它记录log4J级别的执行日志。 我们可以把这个jmeter.log内容也直接到STDOUT控制台吗?我知道我们可以将日志管道到控制台。但是有没有一种方法可以使用JMeter配置来做到这一点? 我将JMeter作为Kubernetes集群上的容器运行,并希望

  • 问题内容: 我想在JavaFX TextArea中显示控制台输出…不幸的是,我找不到JavaFX的任何有效示例,而只能找到Java Swing的实例,在我看来,这似乎不起作用。 编辑: 我尝试遵循以下示例:http : //unserializableone.blogspot.ch/2009/01/redirecting-systemout-and-systemerr- to.html 并扩展了我

  • 问题语句:我有一个在Xcode中运行的程序,它有一堆print()语句,可以很好地将输出打印到调试控制台。然而,我希望也能够将这些输出重定向到一个文件,这样我就可以让用户将它们发送给我,作为调试的一种方式。 SO上找到的解决方案使我可以将输出重定向到文件,但调试控制台输出将丢失。 问:我想要我的蛋糕和吃它。我希望能够将print()语句重定向到调试控制台和文件。 所以我有引用:https://st