Ведение журнала не работает в веб-приложении с использованием Spring AOP - PullRequest
0 голосов
/ 04 октября 2018

используя Spring AOP, я пытаюсь поместить в свое веб-приложение протоколирование для объекта, называемого corelation, как показано ниже: -

LoggingCorrelationEnrichingAspect.java: -

@Aspect
@Component
public class LoggingCorrelationEnrichingAspect {
    private static final Logger logger = getLogger(LoggingCorrelationEnrichingAspect.class);

    @Around("@annotation(Correlated)")
    public Object wrapWithCorrelationContext(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
            logger.info("Entering  "+ proceedingJoinPoint.getSignature().getName() +" with Correlation Id:: "
                    + ((Map)proceedingJoinPoint.getArgs()[0]).get(CommerceConnectorConstants.HttpHeaders.CORRELATION_ID).get());
        return ((Mono<?>) proceedingJoinPoint.proceed());
    }
}

Correlated.java: -

@Inherited
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Correlated {}

В моей основной операции REST Controller с использованием аннотации @Correlated я пытаюсь зарегистрировать эту корреляцию, как показано ниже: -

  @Correlated
  @GetMapping(path = "/products}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
  public Mono<ProductBeanResponse> getProducts(
      @RequestHeader(name = Test.HttpHeaders.TENANT_ID, required = true) UUID tId,
      @RequestHeader(name = Test.HttpHeaders.CORRELATION_ID, required = true) UUID correlationId
----
---
}

Однако, когда я тестирую свой сервис с помощью инструмента PostMan и вижу журналы приложений, идентификатор соответствия никогда не регистрируется: -

logger.info("Entering  "+ proceedingJoinPoint.getSignature().getName() +" with Correlation Id:: "
                    + ((Map)proceedingJoinPoint.getArgs()[0]).get(CommerceConnectorConstants.HttpHeaders.CORRELATION_ID).get());

Пожалуйста, сообщите, это проблема конфигурации в Spring AOP.

Спасибо

1 Ответ

0 голосов
/ 15 октября 2018

Это может работать любым из следующих двух способов:

  1. Введите полностью определенное имя Correlated в определении точки как @Around("@annotation(com.x.y.z.Correlated)")
  2. Обновите аспектподпись метода для включения Correlated в качестве второго аргумента

    @Around("@annotation(correlated)")
    public Object wrapWithCorrelationContext(ProceedingJoinPoint proceedingJoinPoint, Correlated correlated ) throws Throwable {
        logger.info("Entering  "+ proceedingJoinPoint.getSignature().getName() +" with Correlation Id:: "
                + ((Map)proceedingJoinPoint.getArgs()[0]).get(CommerceConnectorConstants.HttpHeaders.CORRELATION_ID).get());
    return ((Mono<?>) proceedingJoinPoint.proceed());
    }
    

Сообщите в комментариях, если что-либо еще потребуется.

PS :Также, как указал М. Дейн, обязательно удалите объект, брошенный.

...