在应用程序中记录GC信息

时间:2012-04-11 11:34:33

标签: java garbage-collection jvm logging

有没有办法将垃圾收集信息(例如-XX:+PrintGCDetails-verbose:gc的输出)转发到Java应用程序中的记录器(在我的情况下为sl4j + logback)?

2 个答案:

答案 0 :(得分:5)

这些消息是由JVM本机进程生成的,而不是从Java代码生成的,因此您可以

  1. 使用-Xloggc将输出重定向到文件(无旋转)
  2. 直接管道标准输出(多个旋转选项)

答案 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。