Penelitian utama dalam artikel ini adalah konten yang relevan dari log4j yang tidak mencetak tumpukan pengecualian, sebagai berikut.
Baru -baru ini, sebuah fenomena ditemukan di log kesalahan sistem online:
Kode ini menggunakan Log4j untuk mencetak informasi tumpukan Exception Runtime System. Informasi tumpukan tidak dapat dilihat di log kesalahan, hanya informasi pengecualian yang tersedia. Ini adalah pukulan bagi pemrogram. Jika tidak ada informasi tumpukan, bagaimana cara memeriksa bug?
[01-15 11:29:26] [Kesalahan] [org.apache.thrift.server.AbstractNonBlockingServer $ framebuffer: 524] Dilemparkan tak terduga saat memohon!
Kemudian saya mengetahui bahwa ini adalah optimalisasi JDK. JVM akan mengoptimalkan kinerja. Jika pengecualian sering dilemparkan, itu akan dikompilasi ulang dan tidak lagi mencetak tumpukan pengecualian.
Juga relatif mudah untuk menyelesaikan masalah ini. Jika Anda tidak ingin memeriksa log sebelumnya setiap kali dan melihat tumpukan, cukup tambahkan -xx: -omitstacktraceInfasthrow ke parameter startup, Anda dapat menonaktifkan optimasi dan memaksa tumpukan pengecualian untuk dicetak. Ini dapat menyebabkan file log terlalu besar, tetapi file log pada jalur produksi sebelum hari ini akan dikompresi, sehingga tidak merasa bahwa masalahnya tidak besar.
[01-15 16:40:09] [Kesalahan] [org.apache.thrift.server.AbstractNonBlockingServer $ framebuffer: 524] Dilemparkan tak terduga saat memohon!
java.lang.nullpointerException
di com.iqiyi.ttbrain.recommend.selector.services.filterservice.filter2 (filterservice.java:42)
di com.iqiyi.ttbrain.recommend.thrift.ifilterservice $ prosesor $ filter2.getResult (ifilterservice.java:181)
di com.iqiyi.ttbrain.recommend.thrift.ifilterservice $ prosesor $ filter2.getResult (ifilterservice.java:166)
di org.apache.thrift.processfunction.process (ProcessFunction.java:39)
di org.apache.thrift.tbaseprocessor.process (tbaseprocessor.java:39)
di org.apache.thrift.server.abstractnonBlockingServer $ framebuffer.invoke (AbstractNonBlockingServer.java:518)
di org.apache.thrift.server.invocation.run (Invocation.java:18)
di java.util.concurrent.threadpoolexecutor.runworker (threadpoolexecutor.java:1145)
di java.util.concurrent.threadpoolexecutor $ worker.run (threadpoolexecutor.java:615)
di java.lang.thread.run (thread.java:745)
Di atas adalah semua tentang artikel ini tentang log4j yang tidak mencetak tumpukan pengecualian. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!