2011-12-28 43 views
6

私のログファイルにstacktraceを印刷する際に問題があります。 Log4j.properties:log4jはスタックトレースを切り捨てます

log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=/var/log/app/application.log 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n 

log4j.rootLogger=warn, file 
log4j.logger.com.app=info, file 
log4j.additivity.com.app=false 

私は私のクラスのUserGuard.javaに、このような例外をログ:

} catch (Exception e) { 
    log.error("Uncatched error", e); 
    response.setEntity(new StringRepresentation(" ")); 
    response.setStatus(Status.SERVER_ERROR_INTERNAL); 
} 

これは私のapplication.logで、その結果:

2011-12-28 07:30:03 UserGuard [ERROR] Uncatched error 
java.lang.NullPointerException 

ませんスタックトレースが表示されます。これは本当に面倒です。 ありがとう!

別のマシンで同じpom.xmlと同じlog4j.propertiesを試しても問題ありません。問題は私のJavaバージョンだと思いますか?

+0

'log4j.additivity.file = false' –

+0

ConsoleAppenderなどの別のアペンダーを使用しても問題は解決しますか?デバッグ出力を有効にしてlog4jを実行しようとしましたが、log4j設定にエラーがあるかどうかを確認できますか? – chrisbunney

+0

私は両方とも成功しなかった。 – Gonzalo

答えて

6

あなたのスタックトレースが最も可能性が高いため、ホットスポットでの最適化に切り捨てなっているが。最適化では、同じスタックトレースが限られた回数だけ作成され、同じ正確な場所からの例外の将来のインスタンスは作成されません。

-XX:-OmitStackTraceInFastThrowフラグを使用してこの最適化を無効にするか、以前のログに戻ってこの例外の最初のインスタンスを検出することができます(このログは一度記録され、その後最適化されます)。

これを参照してください。StackOverflow questionおよびthis oneおよびblog post over hereを参照してください。

+1

ありがとうございました!それはそれをした! – Gonzalo

関連する問題