如何为 JVM 崩溃日志文件指定一个唯一的名称?
How to specify a unique name for the JVM crash log files?
当 JVM 崩溃时,它会生成一个日志文件,该文件(默认情况下)保存在应用程序的当前文件夹中,其名称遵循以下格式:hs_err_pid[PID] .log
我需要让 JVM 以所需的名称将此文件保存在不同的文件夹中。所以,我为虚拟机使用这个命令行参数:
-XX:ErrorFile=./log/jvm_error_pid%p.log
它正在运行,但我不喜欢这个解决方案。假设日志文件夹已经包含一个名为 jvm_error_pid5000.log 的文件。如果 PID 为 5000 的 JVM 将来发生崩溃,则 JVM 不会覆盖日志文件夹中的 jvm_error_pid5000.log 文件,而是将此日志文件保存在一个完全不同的目录中位置(来自我在当前 OS 用户的 TEMP 文件夹中测试的内容)。它甚至不会通过附加随机字符串来重命名新文件以确保唯一性。
我在有关崩溃日志文件的 Oracle 文档页面上没有发现任何关于此唯一性问题的信息。我想知道是否有一种方法可以改进该命令行参数,以便它始终生成不同的崩溃日志文件名。例如,我想使用命令行参数将日期和时间放在文件名中:
-XX:ErrorFile=./log/jvm_error_pid%p_%d_%h.log
您可以做的一件事就是将错误日志通过电子邮件发送到某个电子邮件地址
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了解更多信息。
除了 %p
,JVM 不会扩展 ErrorFile
中的占位符。但是您可以修改启动 Java 的 shell 脚本,并改用 shell 变量。
#!/bin/bash
TS=`date +%F-%H%M%S`
java -XX:ErrorFile=/tmp/hserr_%p_$TS.log ...
当 JVM 崩溃时,它会生成一个日志文件,该文件(默认情况下)保存在应用程序的当前文件夹中,其名称遵循以下格式:hs_err_pid[PID] .log
我需要让 JVM 以所需的名称将此文件保存在不同的文件夹中。所以,我为虚拟机使用这个命令行参数:
-XX:ErrorFile=./log/jvm_error_pid%p.log
它正在运行,但我不喜欢这个解决方案。假设日志文件夹已经包含一个名为 jvm_error_pid5000.log 的文件。如果 PID 为 5000 的 JVM 将来发生崩溃,则 JVM 不会覆盖日志文件夹中的 jvm_error_pid5000.log 文件,而是将此日志文件保存在一个完全不同的目录中位置(来自我在当前 OS 用户的 TEMP 文件夹中测试的内容)。它甚至不会通过附加随机字符串来重命名新文件以确保唯一性。
我在有关崩溃日志文件的 Oracle 文档页面上没有发现任何关于此唯一性问题的信息。我想知道是否有一种方法可以改进该命令行参数,以便它始终生成不同的崩溃日志文件名。例如,我想使用命令行参数将日期和时间放在文件名中:
-XX:ErrorFile=./log/jvm_error_pid%p_%d_%h.log
您可以做的一件事就是将错误日志通过电子邮件发送到某个电子邮件地址
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了解更多信息。
除了 %p
,JVM 不会扩展 ErrorFile
中的占位符。但是您可以修改启动 Java 的 shell 脚本,并改用 shell 变量。
#!/bin/bash
TS=`date +%F-%H%M%S`
java -XX:ErrorFile=/tmp/hserr_%p_$TS.log ...