문제

내 프로젝트에 사용 된 타사 폐쇄 소스 라이브러리 (내부에 사용자 정의 로거가있는)가 생성 한 일부 로그 파일을 처리하려면 작은 로그 분석기 응용 프로그램을 작성해야합니다.

로그의 예외 항목의 경우 스택 추적을 따라 관련된 방법에 대한 집계 된 정보를 상단에서 실제 예외 장소로 수집해야합니다.

불행히도 기본적으로 Java PrintStackTrace ()는 통화 스택의 모든 메소드가 인쇄되지 않고 특정 번호까지 인쇄하며 나머지는 방금 참조됩니다. 16 more....

내가 직접 예외를 포착 할 수 있다면 getStacktrace ()를 사용하고 직접 인쇄하지만 근본 원인은이 라이브러리가 발생하는 예외에 포함되지 않습니다.

Java에게 스택 트레이스에서 전체 통화 스택을 인쇄하도록 요청하는 방법이 있습니까?

내 상황 외에도 일반적인 로깅 프레임 워크가 이에 대한 옵션이 있습니까?

편집하다: 이 프로그램은 JDK 1.5.0_09와 함께 Sun의 JVM에서 실행됩니다. 그것을 변경할 수있는 옵션이 없습니다.

도움이 되었습니까?

해결책

설명이 있습니다 '원인'과 '... N 인쇄 된 추적에 더 많은 라인. 참조 PrintStackTrace 용 Javadoc. 할 일이 없을 수도 있습니다.

"..."라는 문자가 포함 된 줄의 존재에 주목하십시오. 이 라인은이 예외에 대한 나머지 스택 추적 이이 예외 ( "Enclosing"예외)에 의해 발생하는 예외의 스택 추적 하단에서 표시된 프레임 수와 일치 함을 나타냅니다. 이 속기는 "원인 예외"와 동일한 방법에서 포장 된 예외가 발생하는 공동 케이스에서 출력 길이를 크게 줄일 수 있습니다.

다른 팁

당신은 함께 할 수 없습니다 Thread.currentThread().getStackTrace()?

메소드를 재귀 적으로 20 번 호출 한 다음 현재 스레드의 스택을 버리는 진정한 간단한 예제입니다.

public class Test {
    public static void main(String[] args) {
        method();
    }

    static int x = 0;
    private static void method() {
        if(x>20) {
            StackTraceElement[] elements = Thread.currentThread().getStackTrace();

            for(int i=0; i<elements.length; i++) {
                System.out.println(elements[i]);
            }
        }
        else {
            x++;
            method();
        }
    }
}

다음과 같이 반환 한 배열을 반복하려고 할 수 있습니다.

Thread.currentThread().getStackTrace();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top