首页 > 解决方案 > 带有spring boot的log4j2没有捕获所有异常

问题描述

我在我的 Spring Boot 应用程序中添加了带有 ECS 布局的 log4j2,以 JSON 格式记录所有日志。我注意到有一些异常仍然以默认格式登录。

也许我没有捕捉到那些异常,而那些被春天捕捉到了。

log4j2 配置

appenders=console
appender.console.type=Console
appender.console.name=STDOUT
appender.console.ignoreExceptions=false
appender.console.layout.type=EcsLayout
appender.console.layout.serviceName=appa
rootLogger.level=error
rootLogger.appenderRef.stdout.ref=STDOUT
logger.spring.name=org.springframework
logger.spring.level=error
logger.infra.name=com.app.infra
logger.infra.level=info

日志样本

{"@timestamp":"2020-10-29T12:08:18.700Z", "log.level": "INFO", "message":"Successfully applied security_group", "service.name":"app","event.dataset":"deployment-portal-backend-navi-service.log","process.thread.name":"ForkJoinPool.commonPool-worker-19","log.logger":"com.navi.infra.portal.service.kubernetes.KubernetesManifestService"}
{"@timestamp":"2020-10-29T12:08:18.700Z", "log.level": "INFO", "message":"Updating ingress", "service.name":"app","event.dataset":"deployment-portal-backend-navi-service.log","process.thread.name":"http-nio-8080-exec-1","log.logger":"com.navi.infra.portal.service.kubernetes.KubernetesManifestService","CorrelationId":"dbec0188-fd6f-458d-93e1-bc71a1b93a98"}
[]
io.kubernetes.client.openapi.ApiException: javax.net.ssl.SSLHandshakeException: extension (5) should not be presented in certificate_request
    at io.kubernetes.client.openapi.ApiClient.execute(ApiClient.java:898)
    at io.kubernetes.client.openapi.apis.CustomObjectsApi.getNamespacedCustomObjectWithHttpInfo(CustomObjectsApi.java:1705)
    at io.kubernetes.client.openapi.apis.CustomObjectsApi.getNamespacedCustomObject(CustomObjectsApi.java:1681)
    at com.navi.infra.portal.client.KubeClient.getNamespacedObjectStatus(KubeClient.java:44)
    at com.navi.infra.portal.service.kubernetes.KubernetesManifestService.getSecurityGroupIdsFromKubernetes(KubernetesManifestService.java:190)
    at com.navi.infra.portal.service.kubernetes.KubernetesManifestService.getSecurityGroupForDeployment(KubernetesManifestService.java:223)
    at com.navi.infra.portal.service.kubernetes.KubernetesManifestService.updateDeployment(KubernetesManifestService.java:149)
    at com.navi.infra.portal.service.kubernetes.KubernetesManifestService.lambda$updateIngressWithSecurityGroup$1(KubernetesManifestService.java:107)
    at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1807)
    at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1799)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1016)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1665)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1598)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)
Caused by: javax.net.ssl.SSLHandshakeException: extension (5) should not be presented in certificate_request
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:311)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:267)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:258)
    at java.base/sun.security.ssl.SSLExtensions.<init>(SSLExtensions.java:90)
    at java.base/sun.security.ssl.CertificateRequest$T13CertificateRequestMessage.<init>(CertificateRequest.java:818)
    at java.base/sun.security.ssl.CertificateRequest$T13CertificateRequestConsumer.consume(CertificateRequest.java:922)
    at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:444)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:422)
    at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:181)
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:164)
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1460)
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1368)
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:437)
    at okhttp3.internal.connection.RealConnection.connectTls(RealConnection.java:336)
    at okhttp3.internal.connection.RealConnection.establishProtocol(RealConnection.java:300)
    at okhttp3.internal.connection.RealConnection.connect(RealConnection.java:185)
    at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.java:224)
    at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.java:108)
    at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.java:88)
    at okhttp3.internal.connection.Transmitter.newExchange(Transmitter.java:169)
    at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:41)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
    at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
    at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
    at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229)
    at okhttp3.RealCall.execute(RealCall.java:81)
    at io.kubernetes.client.openapi.ApiClient.execute(ApiClient.java:894)
    ... 14 more
java.lang.NullPointerException
    at com.navi.infra.portal.service.kubernetes.KubernetesManifestService.getSecurityGroupIdsFromKubernetes(KubernetesManifestService.java:199)
    at com.navi.infra.portal.service.kubernetes.KubernetesManifestService.getSecurityGroupForDeployment(KubernetesManifestService.java:223)
    at com.navi.infra.portal.service.kubernetes.KubernetesManifestService.updateDeployment(KubernetesManifestService.java:149)
    at com.navi.infra.portal.service.kubernetes.KubernetesManifestService.lambda$updateIngressWithSecurityGroup$1(KubernetesManifestService.java:107)
    at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1807)
    at java.base/java.util.concurrent.CompletableFuture$AsyncRun.exec(CompletableFuture.java:1799)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1016)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1665)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1598)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:177)

标签: javaspring-bootlogginglog4jlog4j2

解决方案


推荐阅读