如何为JVM崩溃日志文件指定唯一的名称?

问题描述:

当JVM崩溃,它生成的应用程序的当前文件夹中保存(默认)日志文件,并有一个名字尊重格式如下:hs_err_pid [PID]的.log如何为JVM崩溃日志文件指定唯一的名称?

我需要做JVM将该文件保存在具有所需名称的不同文件夹中。所以,我用虚拟机此命令行参数:

-XX:ErrorFile=./log/jvm_error_pid%p.log 

这是工作,但我不喜欢的东西,这个解决方案。我们假设日志文件夹已经包含一个名为jvm_error_pid5000.log的文件。如果在具有5000 PID的JVM上出现未来崩溃,则JVM不会覆盖日志文件夹中的jvm_error_pid5000.log文件,并且它将此日志文件保存在完全不同的位置(与我在TEMP文件夹中测试的位置相同的当前操作系统用户)。它甚至不会通过附加一个随机字符串来重命名新文件以确保唯一性。

我还没有在Oracle文档页面上找到关于此唯一性问题的任何关于崩溃日志文件的信息。我想知道是否有一种方法来改善该命令行参数,以便它将始终生成不同的崩溃日志文件名称。例如,我想用命令行参数放在文件名的日期和时间:

-XX:ErrorFile=./log/jvm_error_pid%p_%d_%h.log 

JVM不会扩大ErrorFile中的占位符,而不是%p。但是您可以修改启动Java的shell脚本,并使用shell变量。

#!/bin/bash 
TS=`date +%F-%H%M%S` 
java -XX:ErrorFile=/tmp/hserr_%p_$TS.log ... 
+0

想想我只想让** --XX:ErrorFile = ./log/jvm_error_pid%p.log **因为这个JVM错误很少出现(所以有重复的机会是非常低的)。我将标记这个答案,因为在应用程序启动之前在某处动态生成该参数是一个好主意。 – Valy

+0

我想要的另一个想法是实现启动实际Java应用程序的另一个Java应用程序。这是动态生成** - XX:ErrorFile **参数的另一种方法。 – Valy

一件事你能做的仅仅是电子邮件的错误日志一些电子邮件地址

java -XX:OnError="cat hs_err_pid%p.log|mail [email protected]" \ MyApplication 

有关更多信息,请参阅http://www.oracle.com/technetwork/java/javase/clopts-139448.html#gbmum

+0

它并不适用于我的情况,但是这是一个有趣的想法:) – Valy

+0

这只是一个变通。所以,每当jvm崩溃时,您将收到一封电子邮件,并且您将记录所有崩溃。 – Maverick

+2

您可以扩展@Leozeo的想法并制作一个小脚本以输出到包含时间戳的文件名 –