使用 slf4j 登录 AWS Lambda

2022-09-01 14:18:49

我正在使用一个lambda函数并用Java编写它。当我阅读文档时,我正在查找Lambda函数的日志记录,它们支持log4j - http://docs.aws.amazon.com/lambda/latest/dg/java-logging.html#java-wt-logging-using-log4j

我想知道我们是否也可以使用Slf4j注释进行日志记录,因为Slf4j只是一个绑定注释。以前有人尝试过将Slf4j与lambda一起使用吗?


答案 1

是的,可以。只需将以下依赖项添加到项目中:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-lambda-java-log4j</artifactId>
        <version>1.0.0</version>
    </dependency>

并在您的项目中创建正确的内容,例如log4j.properties/src/main/resources/

log = .
log4j.rootLogger = DEBUG, LAMBDA

# Define the LAMBDA appender
log4j.appender.LAMBDA=com.amazonaws.services.lambda.runtime.log4j.LambdaAppender
log4j.appender.LAMBDA.layout=org.apache.log4j.PatternLayout
log4j.appender.LAMBDA.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss} <%X{AWSRequestId}> %-5p %c{1}:%m%n

答案 2

jlib AWS Lambda Logback Appender 允许您将 SLF4J 与 AWS Lambda 函数中的 Logback 结合使用。

只需添加以下依赖项:

Gradle (build.gradle

dependencies {
    implementation 'org.slf4j:slf4j-api:1.8.0-beta2'
    runtimeOnly 'org.jlib:jlib-awslambda-logback:1.0.0'
}

梅文(绒球.xml

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.8.0-beta2</version>
</dependency>
<dependency>
    <groupId>org.jlib</groupId>
    <artifactId>jlib-awslambda-logback</artifactId>
    <version>1.0.0</version>
    <scope>runtime</scope>
</dependency>

然后在日志记录配置中使用 :AwsLambdaAppender

示例 XML 配置(src/main/resources/logback.xml

<configuration>

    <appender name="awslambda" class="org.jlib.cloud.aws.lambda.logback.AwsLambdaAppender">
        <encoder type="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] &lt;%-36X{AWSRequestId:-request-id-not-set-by-lambda-runtime}&gt;
%-5level %logger{10} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="awslambda" />
    </root>

</configuration>

与其他解决方案不同,此 Logback 追加器可正确处理多行日志消息(尤其是堆栈跟踪),并且每条消息仅生成一个 CloudWatch Logs 事件。

该库还允许您在每个日志消息中包含 AWS Lambda 运行时提供的 AWSRequestId,以便更好地进行跟踪。

虽然 log4j2 在创建 uber-jar 时需要在构建中进行额外的处理,但此解决方案开箱即用。

免責聲明:我是 jlib 的开发者


推荐