【问题标题】:AWS lambda not working with Log4j 2 appenderAWS lambda 不适用于 Log4j 2 appender
【发布时间】:2018-03-01 07:59:09
【问题描述】:

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

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

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

log4j:WARN 找不到记录器 (com.amazonaws.AmazonWebServiceClient) 的附加程序。 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>

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

【问题讨论】:

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


    【解决方案1】:

    请注意,AWS 文档中存在/曾经在 java 中进行 lambda 日志记录的错误。我已经为此向 github 推送了一个修复程序,但与此同时,请参阅我对另一篇文章的回答,这可能是您需要的。

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

    this other stackoverflow question

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        Logging reference

        创建 Alexa Skill 时 - 它的依赖项已经包含 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”的附加程序“Lambda”

        添加:

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

        【讨论】:

          猜你喜欢
          • 2021-07-27
          • 2017-08-08
          • 1970-01-01
          • 1970-01-01
          • 2021-02-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-20
          相关资源
          最近更新 更多