AWS lambda无法使用Log4j 2 appender

时间:2018-03-01 07:59:09

标签: aws-lambda log4j2 apache-commons-logging

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

我也按照AWS Lambda LOgging in Java中的说明进行了操作。

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

  

log4j:WARN找不到logger(com.amazonaws.AmazonWebServiceClient)的appender。   log4j:WARN请正确初始化log4j系统。   log4j:WARN有关详细信息,请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig

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

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

3 个答案:

答案 0 :(得分:1)

请注意,AWS文档中有一个关于java中lambda日志记录的错误。我已经把它修复到了github,但同时看到我对另一篇文章的回答可能就是你需要的。

tldr;从.LambdaAppender代码

packages属性中删除<Configuration ...

请参阅this other stackoverflow question

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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>

成绩:

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”的附加程序“ Lambda”

添加:

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

enter image description here

enter image description here