当JVM崩溃时,它会生成一个日志文件(默认情况下)保存在应用程序的当前文件夹中,其名称遵循以下格式: hs_err_pid [PID] .log
我需要让JVM将此文件保存在具有所需名称的其他文件夹中。因此,我将此命令行参数用于虚拟机:
-XX:ErrorFile=./log/jvm_error_pid%p.log
它正在运作,但我不喜欢这个解决方案。我们假设日志文件夹已包含名为 jvm_error_pid5000.log 的文件。如果JVM上有5000 PID的未来崩溃,那么JVM不会覆盖日志文件夹中的 jvm_error_pid5000.log 文件,它会将此日志文件保存在完全不同的位置(从我的在当前OS用户的TEMP文件夹中测试)。它甚至不会通过附加随机字符串来重命名新文件以确保唯一性。
我在Oracle文档页面上找不到有关崩溃日志文件的唯一性问题。我想知道是否有办法改进该命令行参数,以便它始终生成不同的崩溃日志文件名。例如,我想使用命令行参数将日期和小时放在文件名中:
-XX:ErrorFile=./log/jvm_error_pid%p_%d_%h.log
答案 0 :(得分:1)
JVM不会在ErrorFile
以外的%p
中展开占位符。但是,您可以修改启动Java的shell脚本,并改为使用shell变量。
#!/bin/bash
TS=`date +%F-%H%M%S`
java -XX:ErrorFile=/tmp/hserr_%p_$TS.log ...
答案 1 :(得分:0)
您可以做的一件事就是将错误日志通过电子邮件发送到某个电子邮件地址
java -XX:OnError="cat hs_err_pid%p.log|mail support@acme.com" \ MyApplication
有关详细信息,请参阅http://www.oracle.com/technetwork/java/javase/clopts-139448.html#gbmum。