log4jが例外のためにスタックトレースを表示しない
質問
tomcatでlog4jを使用しています。JSPやサーブレットで例外をログに記録する場合、どのようにすればよいでしょうか。
private Logger _log = Logger.getLogger(this.getClass());
...
try{...} catch (Exception e) {
_log.error("Error refreshing all prices", e);
}
スタックトレースなしで、例外の1行目だけが表示されます。
17-Feb 17:37:45 ERROR AutoContrib:175 - csv ファイルを公開中に例外が発生しました。 java.lang.ArrayIndexOutOfBoundsException を発生させました。
全く役に立ちません!
私のlog4j.propertiesファイル(/tomcat/common/classes/log4j.properties)は、以下のような感じです。
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{dd-MMM HH:mm:ss} %5p %c{1}:%L - %m%n
log4j.appender.stdout.threshold=info
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=5000KB
log4j.appender.file.maxBackupIndex=10
log4j.appender.file.File=${catalina.home}/logs/web.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{dd-MMM HH:mm:ss} %5p %c{1}:%L - %m%n
log4j.appender.file.threshold=info
log4j.rootLogger=debug, stdout, file
どのように解決するのですか?
実際には、ホットスポットの最適化が原因でしょう。同じ例外がある回数投げられると、トレースの印刷を停止します。これは VM arg でオフにすることができます。
以下から http://www.oracle.com/technetwork/java/javase/relnotes-139183.html :
サーバー VM のコンパイラーは、すべての "cold" の組み込み例外に対して、正しいスタックバックトレースを提供するようになりました。 コールド例外を提供するようになりました。パフォーマンス上の理由から このような例外が数回スローされた場合、メソッドは再コンパイルされることがあります。 再コンパイル後、コンパイラは、より高速な戦術として 再コンパイル後、コンパイラはスタック・トレースを提供しない事前割り当て例外を使用したより高速な戦術を選ぶかもしれません。事前割り当て例外の使用を 事前割り当て例外の使用を完全に無効にするには、この新しいフラグを使用します。 -XX:-OmitStackTraceInFastThrowを使用します。
詳細はこちら。
関連
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
アクセス制限です。タイプ 'JPEGCodec' は API ではない ☞My Blog Github ☜ ホームページを見る
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
executeQuery()でデータ操作文が発行できない。解決方法
-
Javaジェネリックを1つの記事で
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
git pull appears現在のブランチに対するトラッキング情報がありません。
-
Java JDKのダイナミックプロキシ(AOP)の使用と実装の原理分析
-
[解決済み] ハイバネートログのコンソール出力をオフにする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipseは、ポップアップA Java Exception has occurred.を実行し、エラーException in threadの解決策を報告します。
-
javaの非静的メソッドを静的に参照することができない
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
無効な文字定数
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
Javaジェネリックを1つの記事で
-
ジャバアレイ
-
maven レポート エラー 解決不可能な親POM
-
Java:未解決コンパイル問題の解決方法
-
[解決済み] log4jにスタックトレースを送信する方法は?