2017-02-15 14 views
0

Когда JVM падает он создает файл журнала, который будет сохранен (по умолчанию) в текущей папке приложения и имеет имя уважая следующий формат: hs_err_pid [PID] .logКак указать уникальное имя для файлов журнала сбоев JVM?

мне нужно сделать JVM сохранит этот файл в другой папке с нужным именем. Таким образом, я использую эту аргумент командной строки для виртуальной машины:

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

Это работает, но мне не нравится что-то об этом решении. Предположим, что папка журнала уже содержит файл с именем jvm_error_pid5000.log. Если в JVM произошел сбой на JVM с 5000 PID, JVM не переопределяет файл jvm_error_pid5000.logjvm_error_pid5000.log из папки журнала и сохраняет этот файл журнала в совершенно другом месте (из того, что я тестировал в папке TEMP текущего пользователя ОС). Он даже не переименовывает новый файл, добавляя случайную строку, чтобы обеспечить уникальность.

Я не нашел ничего относительно этой уникальности на странице документации Oracle о файлах журнала сбоев. Я хотел бы знать, есть ли способ улучшить этот аргумент командной строки, чтобы он всегда генерировал разные имена файлов журнала сбоев. Например, я хочу использовать аргумент командной строки, чтобы поставить дату и время в имени файла:

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

ответ

1

JVM не расширяет заполнители в ErrorFile кроме %p. Но вы можете изменить сценарий оболочки, запускающий Java, и вместо этого использовать переменные оболочки.

#!/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 и сделать небольшой скрипт для вывода на имя файла, которое содержит временную метку –