2017-02-15 40 views
0

當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 

回答

1

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

0

一件事你能做的僅僅是電子郵件的錯誤日誌一些電子郵件地址

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的想法並製作一個小腳本以輸出到包含時間戳的文件名 –