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

标签 java jvm jvm-arguments crash-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 文件,并且会将此日志文件保存在完全不同的位置(与我的位置不同)。在当前操作系统用户的 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 ...

关于java - 如何为 JVM 崩溃日志文件指定唯一的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42255176/

相关文章:

java - 在需要该类实例的类中使用静态方法

java - Spring JsonPath 包含任何顺序异常

java - Java Swing 客户端使用 Web 服务的最简单方法是什么?

java - 一台服务器上有许多相同的网站

garbage-collection - 年轻代中的JVM垃圾收集

java - 如何为java设置永久内存设置?

java - 开始为 JVM 分配内存

java - 如何通过传递新线程作为参数来执行执行器服务?

java - 如何完全禁用java进程的堆转储?

.net - 如何制作.Net或JVM语言?