이 기사의 주요 연구는 다음과 같이 Exception Stack을 인쇄하지 않는 Log4J의 관련 내용입니다.
최근 온라인 시스템의 오류 로그에서 현상이 발견되었습니다.
코드는 Log4J를 사용하여 시스템 런타임 예외 스택 정보를 인쇄합니다. 오류 로그에서 스택 정보를 볼 수 없으며 예외 정보 만 사용할 수 있습니다. 이것은 프로그래머에게 타격입니다. 스택 정보가 없으면 버그를 어떻게 확인할 수 있습니까?
[01-15 11:29:26] [ERROR] [org.apache.thrift.server.AbstractNonBlockingServer $ FrameBuffer : 524] 호출하는 동안 예기치 않은 던지기 가능!
나중에 나는 이것이 JDK의 최적화라는 것을 알았습니다. JVM은 성능을 최적화합니다. 예외가 자주 발생하면 재 컴파일되고 더 이상 예외 스택을 인쇄하지 않습니다.
이 문제를 해결하는 것도 비교적 간단합니다. 매번 이전 로그를 확인하고 스택을 보지 않으려면 -xx : -omitstacktraceinfastthrow를 시작 매개 변수에 추가하면 최적화를 비활성화하고 예외 스택을 인쇄 할 수 있습니다. 로그 파일이 너무 커질 수 있지만 오늘 이전의 생산 라인의 로그 파일이 압축되므로 문제가 크지 않다고 생각하지 않습니다.
[01-15 16:40:09] [ERROR] [org.apache.thrift.server.AbstractNonBlockingServer $ FrameBuffer : 524] 송금하는 동안 예기치 않은 던지기 가능!
java.lang.nullpointerexception
at com.iqiyi.ttbrain.recommend.selector.services.filterservice.filter2 (filterservice.java:42)
at com.iqiyi.ttbrain.recommend.thrift.ifilterservice $ processor $ filter2.getResult (ifilterservice.java:181)
at com.iqiyi.ttbrain.recommend.thrift.ifilterservice $ processor $ filter2.getresult (ifilterservice.java:166)
at org.apache.thrift.processfunction.process (processfunction.java:39)
at org.apache.thrift.tbaseprocessor.process (tbaseprocessor.java:39)
at org.apache.thrift.server.abstractnonblockingserver $ framebuffer.invoke (AbstractNonBlockingserver.java:518)
at org.apache.thrift.server.invocation.run (invocation.java:18)
at java.util.concurrent.threadpoolexecutor.runworker (ThreadPoolexecutor.java:1145)
at Java.util.concurrent.threadpoolexecutor $ worker.run (ThreadPoolexecutor.java:615)
at java.lang.thread.run (Thread.java:745)
위의 것은 Log4J 예외 스택을 인쇄하지 않는이 기사에 관한 모든 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!