【问题标题】:How to Log AWSRequestId with Micronaut Lambda Application Native Image如何使用 Micronaut Lambda 应用程序原生映像记录 AWSRequestId
【发布时间】:2021-07-02 11:49:19
【问题描述】:

基于这个关于记录 AWSRequestId 的 guide,我可以在我的 logback.xml 中添加 %X{AWSRequestId} 以在我的 lambda 函数上打印请求 ID。 在示例中,在 MDC 上添加此键的方法是类 MicronautRequestHandler 的 populateMappingDiagnosticContextValues。但是由于我的 lambda 函数有两个端点,所以我将它创建为 Application 类型,它说它使用 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>

在 lambda 设置中,我将处理程序指向我的自定义处理程序,并且应用程序正在运行。 除了日志没有显示 AWSRequestId。 此功能是否仅适用于 MicronautRequestHandler 类而不适用于 MicronautLambdaHandler?

我还在这里尝试了 aws guide,它使用 log4j2 来记录请求 ID。但是在构建 GraalVM 原生镜像时 log4j 不起作用,这就是我坚持使用 logback 的原因。

【问题讨论】:

    标签: aws-lambda micronaut micronaut-aws


    【解决方案1】:

    如果您将populateMappingDiagnosticContextValues 和mdcput 复制到您的处理程序中(我想您已经这样做了),它应该可以在没有任何额外更改的情况下工作。

    【讨论】:

      猜你喜欢
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 2020-10-20
      • 1970-01-01
      • 2017-06-11
      相关资源
      最近更新 更多