gpt4 book ai didi

java - 如何在不破坏应用程序输出的情况下重定向 JVM 输出?

转载 作者:IT老高 更新时间:2023-10-28 21:01:47 25 4
gpt4 key购买 nike

最近我正在编写一些微基准代码,所以我必须打印出 JVM 行为以及我的基准信息。我用

-XX:+PrintCompilation
-XX:+PrintGCDetails

和其他获取 JVM 状态的选项。对于基准信息,我只是使用 System.out.print() 方法。因为我需要知道我打印的消息的顺序和JVM的输出。

我只是在控制台打印出来就可以得到很好的结果,虽然JVM输出有时会撕掉我的消息,但由于它们在不同的线程中,这是可以理解和接受的。

当我需要做一些批处理基准测试时,我想将输出重定向到一个文件中管道( > 在Linux系统中),并使用python从文件中获取结果并进行分析。

问题来了:

JVM 输出总是与我在 Java 应用程序中打印的消息重叠。它破坏了消息的完成。

知道如何处理这种情况吗?我需要 JVM 输出和应用程序输出都在同一个位置,以便保留序列,因为它很重要。而且它们不会相互重叠,所以我不会丢失任何东西。

最佳答案

我建议绕道而行,看看使用 Java Instrumentation API - 使用(编写)一个简单的 Java 代理 来执行此操作。从您的基准测试的角度来看,这也会给您更多的权力。您可以使用 Java 代理记录所有内容(因此不同的记录器线程之间不会发生争用)。

您可以在 http://www.javabeat.net/2012/06/introduction-to-java-agents/ 上阅读更多信息或 http://today.java.net/pub/a/today/2008/04/24/add-logging-at-class-load-time-with-instrumentation.html

关于java - 如何在不破坏应用程序输出的情况下重定向 JVM 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13436520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com