この記事の主な研究は、次のように、例外スタックを印刷しないLog4Jの関連コンテンツです。
最近、オンラインシステムのエラーログで現象が見つかりました。
コードはlog4jを使用して、システムランタイム例外スタック情報を印刷します。スタック情報はエラーログでは表示されず、例外情報のみが利用可能です。これはプログラマーにとって打撃です。スタック情報がない場合、バグを確認するにはどうすればよいですか?
[01-15 11:29:26] [エラー] [org.apache.thrift.server.abstractnonblockingserver $ framebuffer:524]呼び出し中の予期しないスロー可能!
その後、これがJDKの最適化であることがわかりました。 JVMはパフォーマンスを最適化します。例外が頻繁にスローされると、再コンパイルされ、例外スタックを印刷しなくなります。
また、この問題を解決することは比較的簡単です。前のログを毎回チェックしてスタックを確認したくない場合は、-xx:-omitstacktraceinfastスローをスタートアップパラメーターに追加するだけで、最適化を無効にし、例外スタックを印刷することができます。これにより、ログファイルが大きすぎる可能性がありますが、今日の生産ライン上のログファイルは圧縮されるため、問題が大きくないとは感じません。
[01-15 16:40:09] [エラー] [org.apache.thrift.server.abstractnonblockingserver $ framebuffer:524]呼び出し中に予期しないスロー可能!
java.lang.nullpointerexception
com.iqiyi.ttbrain.recommend.selector.services.filterservice.filter2(filterservice.java:42)
com.iqiyi.ttbrain.recommend.thrift.ifilterservice $ processor $ filter2.getResult(ifilterservice.java:181)
com.iqiyi.ttbrain.recommend.thrift.ifilterservice $ processor $ filter2.getResult(ifilterservice.java:166)
atorg.apache.thrift.processfunction.process(processfunction.java:39)
atorg.apache.thrift.tbaseprocessor.process(tbaseprocessor.java:39)
atorg.apache.thrift.server.abstractnonblockingserver $ framebuffer.invoke(abstractnonblockingserver.java:518)
atorg.apache.thrift.server.invocation.run(rikocation.java:18)
java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145)
java.util.concurrent.threadpoolexecutor $ worker.run(shoodpoolexecutor.java:615)
at java.lang.thread.run(thread.java:745)
上記は、例外スタックを印刷しないLOG4Jに関するこの記事に関するすべてです。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!