web-dev-qa-db-fra.com

Connexion à AWS Lambda avec slf4j

J'utilise une fonction lambda et l'écris en Java. Je cherchais la journalisation des fonctions Lambda lorsque j'ai lu la documentation et qu'elle prend en charge log4j - http://docs.aws.Amazon.com/lambda/latest/dg/Java-logging.html#Java-wt-logging- using-log4j

Je me demandais si nous pourrions utiliser la journalisation en utilisant l'annotation Slf4j également, car Slf4j n'est qu'une annotation de liaison. Quelqu'un a-t-il déjà essayé d'utiliser Slf4j avec lambda? 

10
chrisrhyno2003

Oui, vous pouvez. Ajoutez simplement les dépendances suivantes à votre projet

    <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>

et créez le fichier log4j.properties approprié dans/src/main/resources/de votre projet, par exemple.

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
4
foal

Il suffit d'inclure les dépendances suivantes:

<dependency>
    <groupId>io.symphonia</groupId>
    <artifactId>lambda-logging</artifactId>
    <version>1.0.0</version>
</dependency>

Informations générales disponibles sur: https://blog.symphonia.io/a-love-letter-to-lambda-logging-974b0eb49273

5
koppor

Jlib AWS Lambda Logback Appender vous permet d'utiliser SLF4J avec Logback à partir de vos fonctions AWS Lambda. 

Ajoutez simplement ces dépendances:

Gradle (build.gradle)

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

Maven (pom.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>

Puis utilisez AwsLambdaAppender dans votre configuration de journalisation:

Exemple de configuration 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>

Contrairement aux autres solutions, Logback Appender gère correctement les messages de journal multi-lignes, en particulier traces de pile, et ne produit que un seul événement CloudWatch Logs par message.

La bibliothèque vous permet également d'inclure AWSRequestId, fourni par le moteur d'exécution AWS Lambda, dans chaque message de journal pour une meilleure traçabilité.

Bien que log4j2 nécessite une manipulation supplémentaire dans la construction lorsque vous créez un uber-jar, cette solution fonctionne immédiatement.

Disclaimer: Je suis le développeur de jlib

3
Igor Akkerman