Основным исследованием в этой статье является соответствующее содержание Log4J, не печатающего стек исключений, следующим образом.
Недавно в журнале ошибок онлайн -системы было найдено явление:
Код использует log4j для печати информации о стеке исключений выполнения системы. Информация о стеке не может быть замечена в журнале ошибок, доступна только информация о исключении. Это удар по программистам. Если нет информации о стеке, как я могу проверить на наличие ошибок?
[01-15 11:29:26] [Ошибка] [org.apache.trift.server.abstractnonblockingserver $ framebuffer: 524] Неожиданный бросок, призывая!
Позже я узнал, что это оптимизация JDK. JVM оптимизирует производительность. Если исключение часто бросается, оно будет перекомпилировано и больше не печатает стек исключений.
Также относительно просто решить эту проблему. Если вы не хотите проверять предыдущий журнал каждый раз и смотреть на стек, просто добавьте -xx: -omitstacktraceinfastthrow в параметр запуска, вы можете отключить оптимизацию и заставить стек исключений печатать. Это может привести к тому, что файл журнала будет слишком большим, но файлы журнала на производственной линии до сегодняшнего дня будут сжаты, поэтому не считает, что проблема не большая.
[01-15 16:40:09] [ОШИБКА] [org.apache.trift.server.abstractnonblockingserver $ Framebuffer: 524] Неожиданный бросок, призывая!
java.lang.nullpointerexception
в com.iqiyi.ttbrain.recommend.selector.services.filterservice.filter2 (Filterservice.java:42)
в com.iqiyi.ttbrain.recommend.trift.ifilterservice $ processor $ filter2.getresult (ifilterservice.java:181)
в com.iqiyi.ttbrain.recommend.trift.ifilterservice $ processor $ filter2.getresult (ifilterservice.java:166)
at org.apache.trift.processfunction.process (processfunction.java:39)
at org.apache.trift.tbaseprocessor.process (tbaseprocessor.java:39)
at org.apache.trift.server.abstractnonblockserver $ framebuffer.invoke (AbstractNonblockingServer.java:518)
at org.apache.trift.server.invocation.run (vococation.java:18)
на java.util.concurrent.threadpoolexecutor.runworker (ThreadPoolexeCutor.java:1145)
at java.util.concurrent.treadpoolexecutor $ ablermer.run (threadpoolexecutor.java:615)
на java.lang.thread.run (Thread.java:745)
Выше приведено в этой статье о том, что log4j не печатает стек исключений. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!