建议在AWS Lambda中记录数据

时间:2016-05-09 09:40:15

标签: java logging log4j aws-lambda

当使用Java编写Lambda函数时,AWS lambda目前支持logging的两种方式。

  • 的log4j
  • LambdaLogger

我想知道使用一种日志记录方案是否优于其他方案。

谢谢!

5 个答案:

答案 0 :(得分:3)

我从Aws Lambda Java Logging了解到并在网上搜索是

  • Log4J的

    • 专业人员:您可以自定义日志(使用log4j.properties)。
    • 缺点:当您为项目添加更多依赖项时,它会增加jar / zip的大小
  • LambdaLogger

    • 专业人士:它可以节省内存,因为它已经嵌入了你的依赖项
    • 缺点:它无法自定义

我希望它有所帮助!

答案 1 :(得分:1)

我认为要保持简单。

1。假设您在maven中有一个应用程序项目,其中将有多个maven模块。每次调用其他模块的实现时,您都不会传递context.getLogger()或上下文参数。

2. 如果你有一个没有模块和多个类的处理函数。在这种情况下,您可以启动AWS Lambda处理程序功能代码并获取context.getLogger()以获取Lambda记录器。

了解更多信息:http://docs.aws.amazon.com/lambda/latest/dg/programming-model-v2.html

答案 2 :(得分:1)

您可能想使用一种流行的日志记录框架,例如SLF4J及其最本机的实现Logback

jlib AWS Lambda Logback Appender允许您在AWS Lambda函数中执行此操作。

答案 3 :(得分:0)

您实际上可以将log4j与自定义lambda附加程序一起使用,以便您的日志可以转到AWS Lambda CloudWatch。请参阅https://github.com/aws/aws-lambda-java-libs/tree/master/aws-lambda-java-log4j2

答案 4 :(得分:0)

LambdaLogger

优点:详细的报告日志

  • RequestId – 调用的唯一请求 ID。
  • 持续时间 - 函数的处理程序方法处理事件所花费的时间。
  • 计费持续时间 – 为调用计费的时间量。 – 对于跟踪请求(XRAY TraceId、SegmentId ...)。
  • 更多...

缺点:只有一级日志。比 Log4J 可配置性低

Log4J

优点: 用于配置日志级别(信息、调试、错误...)的外观库。

缺点:无法将详细报告日志(请求 ID)添加到您的函数日志中

两全其美

您可以通过 aws-lambda-java-log4j2 库获得两全其美 https://docs.aws.amazon.com/lambda/latest/dg/java-logging.html

同时运行 Log4j 和 LambdaLogger 的配置

在您的 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>

在您的build.gradle

dependencies {
    // ...
    runtimeOnly 'org.apache.logging.log4j:log4j-slf4j18-impl:2.13.0'
    runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.2.0'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.6.0'
}