[Garbage-collection] How to redirect verbose garbage collection output to a file?
If in addition you want to pipe the output to a separate file, you can do:
On a Sun JVM:
-Xloggc:C:\whereever\jvm.log -verbose:gc -XX:+PrintGCDateStamps
ON an IBM JVM:
How do I redirect verbose garbage collection output to a file? Sun’s website shows an example for Unix but it doesn't work for Windows.
Java 9 & Unified JVM Logging
JEP 158 introduces a common logging system for all components of the JVM which will change (and IMO simplify) how logging works with GC. JEP 158 added a new command-line option to control logging from all components of the JVM:
For example, the following option:
will log messages tagged with
gc tag using
info level to
stdout. Or this one:
would log messages tagged with
gc tag using
debug level to a file called
gc.txt with no decorations. For more detailed discussion, you can checkout the examples in the JEP page.
An interesting approach would be to redirect gc.log to a named pipe
How to write GC log to named pipe
then read that pipe form the application itself: How to open a Windows named pipe from Java?
and log to an arbitrary (e.g. async rolling) logback logger from the code.
Tried that on a Windows machine. Unfortunately, it is trickier to setup on Windows than on Linux.
On Windows it works basically with help of an additional Powershell script (can be a dedicated application as well). This sample project also contains a demo application that can be used right away to test the GC logs redirection to Logback via SLF4J.