无法在java 11中生成GC日志

Poo*_*ima 3 java garbage-collection java-11

我正在尝试在 java 11 中不存在的文件夹中创建 gc 日志。xxx 文件夹不存在。

C:\>java -Xlog:gc*:file=C:\Users\xxx\gc.log --version

[0.006s][error][logging] Error opening log file 'C:\Users\xxx\gc.log': No such file or directory
[0.006s][error][logging] Initialization of output 'file=C:\Users\xxx\gc.log' using options '(null)' failed.
Invalid -Xlog option '-Xlog:gc*:file=C:\Users\xxx\gc.log', see error log for details.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)

如何获取gc不存在的文件夹中的日志?如果该文件夹存在,则工作正常。

java -version 

openjdk version "11.0.5" 2019-10-15 
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.5+10) 
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.5+10, mixed mode)
Run Code Online (Sandbox Code Playgroud)

Spe*_*ava 5

答案是,你不能。

如果您深入研究 JVM 源代码,您会发现日志记录框架将尝试使用 fopen 库调用打开您提供的文件名。如果日志文件不存在,则创建该日志文件(文件打开方式为append)。但是,日志记录代码不会尝试遍历提供的路径并创建不存在的目录。

对于 JVM 来说,这并不是不合理的行为。

如果您确实想这样做,则需要一个脚本来确保该目录在运行应用程序之前存在。