2017-02-15 1 views
0

JVM이이 응용 프로그램의 현재 폴더에 (기본적으로) 저장되어있는 로그 파일을 생성하고 다음과 같은 형식을 존중 이름이 충돌 : hs_err_pid를 [PID]는 내가해야JVM 충돌 로그 파일에 고유 한 이름을 지정하는 방법은 무엇입니까?

을 .log로 JVM은이 파일을 원하는 이름으로 다른 폴더에 저장합니다. 그래서, 가상 머신이 명령 줄 인수를 사용 : 그것은 작동하고

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

을,하지만 난이 솔루션에 대해 뭔가를 좋아하지 않는다. 로그 폴더에 이미 jvm_error_pid5000.log이라는 파일이 있다고 가정 해 봅시다. 나중에 PID가 5000 인 JVM에 추락이 발생하면 JVM은 로그 폴더의 파일을 덮어 쓰지 않으며이 로그 파일을 TEMP 폴더에서 테스트 한 것과 완전히 다른 위치에 저장합니다 현재 OS 사용자). 심지어는 고유성을 보장하기 위해 임의의 문자열을 추가하여 새 파일의 이름을 바꾸지 않습니다.

오류 로그 파일에 대한 Oracle 설명서 페이지에서이 고유성 문제와 관련하여 아무 것도 발견하지 못했습니다. 나는 항상 다른 충돌 로그 파일 이름을 생성 할 수 있도록 명령 줄 인수를 개선 할 수있는 방법이 있는지 알고 싶습니다. 당신이 할 수있는

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

답변

1

ErrorFile의 자리 표시자를 JVM에서 확장하지 않습니다. %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의 생각을 확장하고 타임 스탬프가 포함 된 파일 이름으로 출력 할 작은 스크립트를 만들 수 있습니다. –

관련 문제