Die Hauptforschung in diesem Artikel ist der relevante Inhalt von LOG4J, das Ausnahmestapel nicht druckt.
Vor kurzem wurde im Fehlerprotokoll des Online -Systems ein Phänomen gefunden:
Der Code verwendet Log4J, um die System -Stapelinformationen der System -Laufzeit -Ausnahme auszudrucken. Die Stapelinformationen können im Fehlerprotokoll nicht angezeigt werden, nur Ausnahmeinformationen sind verfügbar. Dies ist ein Schlag für Programmierer. Wenn es keine Stapelinformationen gibt, wie kann ich nach Fehler suchen?
[01-15 11:29:26] [Fehler] [org.apache.thrift.Server.AbstractnonBlocksServer $ Frambuffer: 524] Unerwartetes Throwable beim Aufrufen!
Später fand ich heraus, dass dies eine Optimierung von JDK ist. JVM wird die Leistung optimieren. Wenn häufig eine Ausnahme ausgelöst wird, wird sie neu kompiliert und drucken Sie den Ausnahmestapel nicht mehr.
Es ist auch relativ einfach, dieses Problem zu lösen. Wenn Sie nicht jedes Mal das vorherige Protokoll überprüfen und sich den Stapel ansehen möchten, fügen Sie einfach -xx: -omitstackTraceInfastthrow zum Startparameter hinzu, Sie können die Optimierung deaktivieren und den Ausnahmestapel zum Drucken erzwingen. Dies kann dazu führen, dass die Protokolldatei zu groß ist, aber die Protokolldateien in der Produktionslinie vor heute werden komprimiert, sodass das Problem nicht groß ist.
[01-15 16:40:09] [Fehler] [org.apache.thrift.Server.AbstractnonBlocksServer $ FrameBuffer: 524] Unerwartetes Throwable beim Aufrufen!
java.lang.nullpointerexception
unter com.iqiyi.ttbrain.recommend.selector.services.filterservice.filter2 (filterservice.java:42)
unter com.iqiyi.ttbrain.recommend.thrift.ifilterservice $ processor $ filter2.getResult (ifilterservice.java:181)
unter com.iqiyi.ttbrain.recommend.thrift.ifilterService $ processor $ filter2.getResult (ifilterservice.java:166)
at org.apache.thrift.processfunction.process (processFunction.java:39)
bei org.apache.thrift.tbaseProcessor.Process (tbaseProcessor.java:39)
at org.apache.thrift.server.abstractnonBlocksServer $ FrameBuffer.invoke (AbstractNonBlocingsServer.java:518)
bei org.apache.thrift.server.invocation.run (Invocation.java:18)
bei java.util.concurrent.threadpoolexecutor.runworker (threadpoolexecutor.java:1145)
bei java.util.concurrent.threadpoolexecutor $ Worker.run (threadpoolexecutor.java:615)
bei java.lang.thread.run (thread.java:745)
Das obige dreht sich alles um diesen Artikel über den Log4j, der Ausnahmestapel nicht druckt. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!