A principal pesquisa deste artigo é o conteúdo relevante do log4j que não imprimia a pilha de exceções, como segue.
Recentemente, um fenômeno foi encontrado no log de erros do sistema online:
O código usa o LOG4J para imprimir as informações da pilha de exceções de tempo de execução do sistema. As informações da pilha não podem ser vistas no log de erros, apenas informações de exceção estão disponíveis. Isso é um golpe para os programadores. Se não houver informações de pilha, como posso verificar se há bugs?
[01-15 11:29:26] [Error] [org.apache.thrift.server.abstractNonBlockingServer $ framebuffer: 524] Inesperado jogável ao invocar!
Mais tarde, descobri que isso é uma otimização do JDK. A JVM otimizará o desempenho. Se uma exceção for lançada frequentemente, ela será recompilada e não imprimirá mais a pilha de exceções.
Também é relativamente simples resolver esse problema. Se você não quiser verificar o log anterior todas as vezes e olhar para a pilha, basta adicionar -xx: -omitstacktraceinfasthrow no parâmetro de inicialização, você pode desativar a otimização e forçar a pilha de exceção a imprimir. Isso pode fazer com que o arquivo de log seja muito grande, mas os arquivos de log na linha de produção antes de hoje serão compactados, para que não sinta que o problema não é grande.
[01-15 16:40:09] [Error] [org.apache.thrift.server.abstractNonBlockingServer $ framebuffer: 524] Inesperado jogável ao invocar!
java.lang.nullPointerException
em com.iqiyi.ttbrain.recommend.selector.services.filterService.Filter2 (filterService.java:42)
em com.iqiyi.ttbrain.recommend.thrift.ifilterService $ processador $ filtro2.getResult (ifilterService.java:181)
em com.iqiyi.ttbrain.recommend.thrift.ifilterService $ processador $ filtro2.getResult (ifilterService.java:166)
em org.apache.thrift.processfunction.process (processfunction.java:39)
em org.apache.thrift.tbaseprocessor.process (tbaseprocessor.java:39)
em org.apache.thrift.server.abstractNonnBlockingServer $ framebuffer.invoke (abstractNonBlockingServer.java:518)
em org.apache.thrift.server.invocation.run (invocação.java:18)
em java.util.concurrent.threadpoolExecutor.runworker (threadpoolexecutor.java:1145)
em java.util.concurrent.threadpoolExecutor $ trabalhador.run (threadpoolexecutor.java:615)
em java.lang.thread.run (thread.java:745)
O exposto acima é tudo sobre este artigo sobre a pilha de exceção de impressão log4j. Espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!