我正在使用lambda函数并用Java编写它.当我阅读文档时,我正在寻找记录Lambda函数,并且它们支持log4j - http://docs.aws.amazon.com/lambda/latest/dg/java-logging.html#java-wt-logging-using- log4j.
我想知道我们是否可以使用Slf4j注释来使用日志记录,因为Slf4j只是一个绑定注释.有没有人在尝试使用Slf4j之前使用lambda?
小智 6
是的你可以。只需将以下依赖项添加到您的项目中
<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>
Run Code Online (Sandbox Code Playgroud)
并在项目的/ src / main / resources /中创建正确的log4j.properties,例如
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
Run Code Online (Sandbox Code Playgroud)
只需包含以下依赖项:
<dependency>
<groupId>io.symphonia</groupId>
<artifactId>lambda-logging</artifactId>
<version>1.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
背景资料见:https://blog.symphonia.io/a-love-letter-to-lambda-logging-974b0eb49273
该jlib AWS拉姆达的logback追加程序允许您使用SLF4J使用的logback从您的AWS lambda函数。
只需添加以下依赖项:
Gradle(build.gradle)
dependencies {
implementation 'org.slf4j:slf4j-api:1.8.0-beta2'
runtimeOnly 'org.jlib:jlib-awslambda-logback:1.0.0'
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
然后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}] <%-36X{AWSRequestId:-request-id-not-set-by-lambda-runtime}>
%-5level %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="awslambda" />
</root>
</configuration>
Run Code Online (Sandbox Code Playgroud)
与其他解决方案不同,此Logback Appender可以正确处理多行日志消息,尤其是堆栈跟踪,并且每条消息仅产生一个 CloudWatch Logs事件。
该库还允许您在每条日志消息中包括由AWS Lambda运行时提供的AWSRequestId,以实现更好的跟踪。
当您创建uber-jar时,虽然log4j2需要在构建中进行其他处理,但此解决方案是开箱即用的。
免责声明:我是jlib的开发人员
自此,AWS 指南更新了有关 Log4j 2 和 SLF4J 集成的详细信息。下面的代码片段基于 slf4j 和 log4j 版本更新到最新版本的指南。
pom.xml:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.19.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-log4j2</artifactId>
<version>1.5.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
和src/main/resources/log4j2.xml:
<Configuration status="WARN">
<Appenders>
<Lambda name="Lambda">
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1} - %m%n</pattern>
</PatternLayout>
</Lambda>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Lambda"/>
</Root>
<Logger name="software.amazon.awssdk" level="WARN"/>
<Logger name="software.amazon.awssdk.request" level="DEBUG"/>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8671 次 |
| 最近记录: |