Как зарегистрировать AWSRequestId с помощью собственного образа приложения Micronaut Lambda

#aws-lambda #micronaut #micronaut-aws

Вопрос:

Основываясь на этом руководстве по регистрации AWSRequestId, я могу добавить %X{AWSRequestId} logback.xml чтобы напечатать идентификатор запроса в моей лямбда-функции. В примере метод, добавляющий этот ключ в MDC populateMappingDiagnosticContextValues , относится к классу MicronautRequestHandler . Но так как моя функция lambda имеет две конечные точки, я создал ее как тип приложения, и в ней говорится, что она использует класс в MicronautLambdaHandler качестве обработчика. руководство

Что я сделал, так это создал свой собственный обработчик, который расширяет MicronautLambdaHandler и добавил populateMappingDiagnosticContextValues метод.

 @Override
public AwsProxyResponse handleRequest(AwsProxyRequest input, Context context) {
    if (context != null) {
        populateMappingDiagnosticContextValues(context);
    }
    return handler.proxy(input, context);
}
 

logback.xml

 <configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <withJansi>false</withJansi>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1} - %m%n</pattern>
        </encoder>
    </appender>
    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>
 

При настройке лямбды я указал обработчик на свой пользовательский обработчик, и приложение работает.
За исключением того, что в журналах не отображается идентификатор AWSRequestId.
Работает ли эта функция только на MicronautRequestHandler классе, а не на MicronautLambdaHandler ?

Я также попробовал здесь руководство aws, в котором используется log4j2 для регистрации идентификатора запроса. Но log4j не работает при создании собственного образа GraalVM, вот почему я придерживался логбэка.