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)
答案是,你不能。
如果您深入研究 JVM 源代码,您会发现日志记录框架将尝试使用 fopen 库调用打开您提供的文件名。如果日志文件不存在,则创建该日志文件(文件打开方式为append)。但是,日志记录代码不会尝试遍历提供的路径并创建不存在的目录。
对于 JVM 来说,这并不是不合理的行为。
如果您确实想这样做,则需要一个脚本来确保该目录在运行应用程序之前存在。