有没有办法将垃圾收集信息(例如-XX:+PrintGCDetails
或-verbose:gc
的输出)转发到Java应用程序中的记录器(在我的情况下为sl4j + logback)?
答案 0 :(得分:5)
这些消息是由JVM本机进程生成的,而不是从Java代码生成的,因此您可以
答案 1 :(得分:3)
一种有趣的方法是将gc.log重定向到命名管道
-Xloggc:/my/named/pipe
How to write GC log to named pipe
然后从应用程序本身读取该管道: How to open a Windows named pipe from Java?
并从代码中记录任意(例如异步滚动)logback记录器。
在Windows机器上尝试过。不幸的是,在Windows上设置比在Linux上设置更棘手。
在Windows上,它基本上可以借助额外的Powershell script(也可以是专用应用程序)。 此sample project还包含一个演示应用程序,可以立即使用它来测试GC日志重定向到SLF4J的Logback。