AWS lambda 不适用于 Log4j 2 appender

AWS lambda not working with Log4j 2 appender

我正在尝试编写一个基于 java 的 lambda 函数。除了日志记录,一切正常。我在类路径中有 log4j2.xml 文件。

我也按照AWS Lambda LOgging in Java中的说明去做了

我在触发 Lambda 函数时在日志中得到了这个。

log4j:WARN No appenders could be found for logger (com.amazonaws.AmazonWebServiceClient). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

我用maven打包jar。 pom.xml 具有以下依赖项。

<dependencies>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>3.8.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>com.amazon.alexa</groupId>
  <artifactId>alexa-skills-kit</artifactId>
  <version>${alexa.version}</version>
</dependency>

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.4</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>org.apache.directory.studio</groupId>
  <artifactId>org.apache.commons.io</artifactId>
  <version>2.4</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-lambda-java-core</artifactId>
  <version>1.0.0</version>
  <scope>compile</scope>
</dependency>
<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk-dynamodb</artifactId>
  <version>1.9.40</version>
</dependency>
<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-lambda-java-log4j2</artifactId>
  <version>1.0.0</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.8.2</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.8.2</version>
</dependency>

我不确定我还必须做些什么才能完成这项工作。

该错误消息是由位于类路径中的旧版本 Log4j (1.2.x) 以某种方式产生的。 Log4j 2.x 错误消息看起来不同。

请从类路径中删除 Log4j 1.2.x jar。如果任何库依赖于 Log4j 1.2,请添加适配器 log4j-1.2-api-2.8.2.jar

请注意 is/was AWS 文档中存在一个错误,用于在 java 中记录 lambda。我已将修复推送到 github,但与此同时请参阅我对另一个 post 的回答,这可能是您需要的。

tldr;从 <Configuration ... 标签的 packages 属性中删除 .LambdaAppender

Logging reference

创建 Alexa 技能时 - 它的依赖项已包含 log4j 组件,但缺少 Log4j 附加程序。将 aws-lambda-java-log4j2 添加到依赖项:

Maven

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-lambda-java-log4j2</artifactId>
    <version>1.1.0</version>
</dependency>

Gradle:

dependencies {
    compile 'com.amazonaws:aws-lambda-java-log4j2:1.1.0'
}

错误变体

未找到 log4j2 配置文件。使用默认配置:仅将错误记录到控制台。将系统 属性 'org.apache.logging.log4j.simplelog.StatusLogger.level' 设置为 TRACE 以显示 Log4j2 内部初始化日志记录。

添加: log4j2.xml(在 Logging reference 中描述)到 src/main/resources

StatusLogger Log4j2 找不到日志记录实现。请将 log4j-core 添加到类路径中。使用SimpleLogger登录控制台

添加(与现有依赖项中的版本相同):

   dependencies {
    compile 'com.amazonaws:aws-lambda-java-core:1.2.0'
       compile 'org.apache.logging.log4j:log4j-core:2.8.2’
   }

未找到 log4j2 配置文件。使用默认配置:仅将错误记录到控制台。将系统 属性 'org.apache.logging.log4j.simplelog.StatusLogger.level' 设置为 TRACE 以显示 Log4j2 内部初始化日志记录。

添加: log4j2.xml(如上所述)到 src/main/resources

处理元素 Lambda 时出错([Appenders: null]):CLASS_NOT_FOUND 无法为记录器配置 "root"

找到 appender "Lambda"

添加:

dependencies {
   compile 'com.amazonaws:aws-lambda-java-log4j2:1.1.0'    
}