로그에서 자르기 스택 트레이스를 잘라내려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/437756

  •  22-07-2019
  •  | 
  •  

문제

Java 로그에서 많은 시간이 있습니다.

Caused by: java.sql.BatchUpdateException: failed batch
    at org.hsqldb.jdbc.jdbcStatement.executeBatch(jdbcStatement.java:1102)
    at org.hsqldb.jdbc.jdbcPreparedStatement.executeBatch(jdbcPreparedStatement.java:514)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
    ... 113 more

누구든지 전체 스택 트레이스를 보여주는 방법을 아는 사람이 있습니까 (즉, 다른 113 줄을 표시).


그만큼 Javadocs (Java 7) Throwable은 무슨 일이 일어나고 있는지에 대한 자세한 설명을 가지고 있습니다.

도움이 되었습니까?

해결책

'... 113 More'를 볼 때, '예외로 인한'나머지 줄은 부모 예외의 해당 지점에서 나머지 줄과 동일하다는 것을 의미합니다.

예를 들어, 당신은 가질 것입니다

com.something.XyzException
  at ...
  at ...
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
  at ... <the other 113 lines are here>...
Caused by: <the above>.

2 개의 스택 트레이스 추적 부위에서 'Meet'에서 'Meet'은 242 행, 그 이후로 상향 호출 트레이스에서 래핑 예외와 동일합니다.

다른 팁

아파치 커먼즈 랭 멋진 util 방법을 제공합니다 exceptions.printrootcausestacktrace () 중첩 된 스택 트레이스 '거꾸로'를 인쇄합니다. 결과는 훨씬 직관적입니다.

PrintStackTrace () 메소드에서 원본 옆에 결과가 표시되면 '113 More'라인이 어디로 갔는지 명확하게 알 수 있습니다.

나는 발견 된 예를 좋아한다 여기:

HighLevelException: MidLevelException: LowLevelException
         at Junk.a(Junk.java:13)
         at Junk.main(Junk.java:4)
 Caused by: MidLevelException: LowLevelException
         at Junk.c(Junk.java:23)
         at Junk.b(Junk.java:17)
         at Junk.a(Junk.java:11)
         ... 1 more
 Caused by: LowLevelException
         at Junk.e(Junk.java:30)
         at Junk.d(Junk.java:27)
         at Junk.c(Junk.java:21)
         ... 3 more

기본적으로 소스 코드에서 main 전화 function a 어떤 전화 function b 전화를 걸고 전화를 겁니다 function e. Function e 던지는 a LowLevelException 함수 c가 잡히게합니다 LowLevelException 그리고 던지는 a MidLevelException (포장 LowLevelException 내부의 인스턴스 MidLevelException 사례. 그만큼 Exception 클래스에는 다른 예외를 취할 수있는 생성자가 있습니다. 이로 인해 기능 A가 잡을 수 있습니다 MidLevelException 그리고 던지는 a HighLevelException 이제 이전 두 가지를 감싸고 있습니다 Exception 인스턴스.

다른 답변에서 언급했듯이 스택 추적은 실제로 잘리지 않으며 전체 스택 추적이 보입니다. 그만큼 .. .3 more 내 예에서는 그렇지 않으면 중복되기 때문에 거기에 있습니다. 중복 및 폐기물 출력 라인이되고 싶다면 .. 3 more 대체 될 수 있습니다

at Junk.b(Junk.java:17)
at Junk.a(Junk.java:11)
at Junk.main(Junk.java:4)

그러나 이미 암시되어 있기 때문에이 세 줄을 출력 할 필요가 없습니다.

증가하다 -XX:MaxJavaStackTraceDepth JVM 옵션.

나는 이것이 전체 사진을 얻는 데 유용하다는 것을 알았습니다. 예외의 전체 스택 추적을 얻으십시오 그리고 원인 (종종 주요 예외에서 반복 된 선을 보여 주지만 도움이 될 수 있음).

        ... catch( Exception e) ...

        ... catch( NoClassDefFoundError e)
        {

                for(StackTraceElement ste: e.getStackTrace())
                {
                    System.out.println(ste);
                }

                if( e.getCause()!=null )
                {
                    for(StackTraceElement ste: e.getCause().getStackTrace())
                    {
                        System.out.println(ste);
                    }
                }
        }

블로그 게시물에서 방금 설명했습니다 "BatchupDateException : 실패한 배치"이상을 얻는 방법: 세트 hibernate.jdbc.factory_class=org.hibernate.jdbc.NonBatchingBatcherFactory 최대 절전 모드에서 배치를 비활성화합니다. 일반적으로 사용할 수 있습니다 BatchUpdateException.getNextException 실패의 이유를 얻으려면 어떤 경우에는 이것이 돌아올 수 있습니다. null. 그런 다음 배치를 완전히 비활성화하는 것이 유용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top