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(for Java 7) のThrowableには、何が起こっているかについてのかなり詳細な説明があります。
「... 113 more」が表示される場合、「caused by」例外の残りの行は、親例外のその時点以降の残りの行と同一であることを意味します。
たとえば、あなたは
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>.
AbstractBatcher.executeBatch、242行目で2つのスタックトレースが「一致」し、それ以降、上方向の呼び出しトレースはラッピング例外と同じです。
Apacheの Commons Lang はNice utilメソッドを提供します ExceptionUtils.printRootCauseStackTrace() はネストされたスタックトレースを「逆さま」で出力します。結果ははるかに直感的です。
PrintStackTrace()メソッドの元の結果の隣に結果が表示された場合、「113 more」行がどこにあるかが明確になります。
私は見つけた例が好きです here :
_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
_はLowLevelException
をスローします。これにより、関数cがLowLevelException
をキャッチし、MidLevelException
をスローします(LowLevelException
インスタンス内にMidLevelException
インスタンスをラップします。Exception
クラスには、異なる例外を取り込んでラップできるコンストラクターがあります) 。これにより、関数aがMidLevelException
をキャッチし、以前の2つのHighLevelException
インスタンスをラップするException
をスローします。
他の回答で述べたように、スタックトレースは実際には切り捨てられておらず、完全なスタックトレースが表示されています。私の例の_.. .3 more
_は、そうでなければ冗長になるためです。冗長にして出力行を無駄にしたい場合は、_.. 3 more
_を次のように置き換えることができます。
_at Junk.b(Junk.Java:17)
at Junk.a(Junk.Java:11)
at Junk.main(Junk.Java:4)
_
しかし、これらの3行はすでに暗示されているため、出力する必要はありません。
増加する -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);
}
}
}