slf4j logging - 了解异常日志记录的异常堆栈跟踪

时间:2021-03-17 21:17:52

标签: java exception logging slf4j error-logging

使用 slf4j 1.7.x 登录我们的 Java 项目。我正在向 Kafka 发布事件并使用 kafka-clients 2.2.0。 在下面的代码中,当 Callback 中抛出某些特定异常时,我想采取一些措施。我期望的例外之一显示在下面的 日志 中,它适用于我在下面的 代码

代码:

  kafkaProducer.send(
      new ProducerRecord<>(topicName, envelope.toEnvelopeString()),
      (meta, exception) -> {
        if (exception != null) { // Exception thrown in the Callback
          // Need to take some action here
          logger.error(
              "Exception thrown during processing. topicName={}, tid={}",
              topicName,
              tid,
              exception);
          ...
        }
      });

日志:

2021-03-03 18:30:45.429 ERROR 4682 --- [         bus-17] c.i.m.c.e.i.GroupAppConnection        : Exception thrown during processing. topicName=abc, tid=1-603fd5d0-37bcd101247a904a1274e3ff
org.apache.kafka.common.errors.ApiException: com.mycompany.app.exceptions.SchemaViolationException: com.mycompany.app.exceptions.AuthorizationException: com.mycompany.dataprotection.domain.item.DataProtectionAccessControlException: API key is not authorized to access the item, API policy ID: policy123, roles=[], folderRoles: []
Caused by: com.mycompany.app.exceptions.SchemaViolationException: com.mycompany.app.exceptions.AuthorizationException: com.mycompany.dataprotection.domain.item.DataProtectionAccessControlException: API key is not authorized to access the item, API policy ID: policy123, roles=[], folderRoles: []
    at com.mycompany.app.validation.validator.SchemaSerializingValidator.encryptFields(SchemaSerializingValidator.java:327) ~[app-core-1.5.0.jar!/:na]
    at com.mycompany.app.validation.validator.SchemaSerializingValidator.validateJson(SchemaSerializingValidator.java:171) ~[app-core-1.5.0.jar!/:na]
    at com.mycompany.app.validation.validator.SchemaSerializingValidator.validate(SchemaSerializingValidator.java:59) ~[app-core-1.5.0.jar!/:na]
    at com.mycompany.app.impl.SerializingMessageFormaterImpl.format(SerializingMessageFormaterImpl.java:41) ~[app-core-1.5.0.jar!/:na]
    at com.mycompany.app.kafka.serde.Serializer.serialize(Serializer.java:96) ~[app-kafka-1.5.0.jar!/:na]
    at org.apache.kafka.common.serialization.Serializer.serialize(Serializer.java:60) ~[kafka-clients-2.2.0.jar!/:na]
    at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:878) ~[kafka-clients-2.2.0.jar!/:na]
    at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:840) ~[kafka-clients-2.2.0.jar!/:na]
    at com.mycompany.core.endpoint.groupapp.GroupAppConnection.publishToApp(GroupAppConnection.java:402) ~[endpoint-0.5.1108-mygitbranch-SNAPSHOT.jar!/:na]
    at com.mycompany.core.endpoint.groupapp.GroupAppConnection.publish(GroupAppConnection.java:396) ~[endpoint-0.5.1108-mygitbranch-SNAPSHOT.jar!/:na]
    at com.mycompany.core.endpoint.groupapp.GroupAppEndpoint.handle(GroupAppEndpoint.java:42) ~[endpoint-0.5.1108-mygitbranch-SNAPSHOT.jar!/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
    at com.google.common.app.Subscriber.invokeSubscriberMethod(Subscriber.java:87) ~[guava-28.2-jre.jar!/:na]
    at com.google.common.app.Subscriber$1.run(Subscriber.java:72) ~[guava-28.2-jre.jar!/:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: com.mycompany.app.exceptions.AuthorizationException: com.mycompany.dataprotection.domain.item.DataProtectionAccessControlException: API key is not authorized to access the item, API policy ID: policy123, roles=[], folderRoles: []
    at com.mycompany.app.cryptography.DataProtectionEncrypter.encrypt(DataProtectionEncrypter.java:107) ~[app-core-1.5.0.jar!/:na]
    at com.mycompany.app.cryptography.DataProtectionEncrypter.encrypt(DataProtectionEncrypter.java:33) ~[app-core-1.5.0.jar!/:na]
    at com.mycompany.app.validation.validator.SchemaSerializingValidator.encryptFields(SchemaSerializingValidator.java:318) ~[app-core-1.5.0.jar!/:na]
    ... 19 common frames omitted
Caused by: com.mycompany.dataprotection.domain.item.DataProtectionAccessControlException: API key is not authorized to access the item, API policy ID: policy123, roles=[], folderRoles: []
    at com.mycompany.dataprotection.service.rest.vkmsecrecy.VkmSecrecyRestErrorService.handleAccessDeniedException(VkmSecrecyRestErrorService.java:106) ~[dataprotection-sdk-3.65.7.jar!/:na]
    at com.mycompany.dataprotection.service.rest.vkmsecrecy.VkmSecrecyRestService.retrieveItem(VkmSecrecyRestService.java:511) ~[dataprotection-sdk-3.65.7.jar!/:na]
    at com.mycompany.dataprotection.domain.item.ItemRepository.renewSecretLatest(ItemRepository.java:697) ~[dataprotection-sdk-3.65.7.jar!/:na]
    at com.mycompany.dataprotection.domain.item.ItemRepository.getItem(ItemRepository.java:472) ~[dataprotection-sdk-3.65.7.jar!/:na]
    at com.mycompany.dataprotection.domain.item.SecretImpl.retrieve(SecretImpl.java:151) ~[dataprotection-sdk-3.65.7.jar!/:na]
    at com.mycompany.dataprotection.domain.item.KeyImpl.getAlgorithm(KeyImpl.java:308) ~[dataprotection-sdk-3.65.7.jar!/:na]
    at com.mycompany.app.cryptography.DataProtectionEncrypter.encrypt(DataProtectionEncrypter.java:91) ~[app-core-1.5.0.jar!/:na]
    ... 21 common frames omitted

我的问题是:基于这个堆栈跟踪,如果我想匹配这个特定的异常,我应该按如下方式匹配它,如果不是如何匹配?

if (exception instanceof org.apache.kafka.common.errors.ApiException
    && exception.getCause() instanceof com.mycompany.app.exceptions.SchemaViolationException) {
  // Take the action here
}

0 个答案:

没有答案