Как я могу заставить AWS Lambda и Spring Boot 2.1.5 использовать Log4j2.xml и войти в Cloudwatch? - PullRequest
1 голос
/ 30 мая 2019

Чтобы войти в cloudwatch в лямбде, нужно использовать этот log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration packages="com.amazonaws.services.lambda.runtime.log4j2">
  <Appenders>
    <Lambda name="Lambda">
      <PatternLayout>
          <pattern>%d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n</pattern>
      </PatternLayout>
    </Lambda>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="Lambda" />
    </Root>
  </Loggers>
</Configuration>

Также в файле pom.xml должны быть следующие элементы:

 <parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>2.1.5.RELEASE</version>
  </parent>
...
    <dependency>
      <artifactId>aws-lambda-java-log4j2</artifactId>
      <groupId>com.amazonaws</groupId>
      <version>1.1.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>2.11.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>2.11.2</version>
    </dependency>

Конечно, все это не работает для меня. Кажется, Spring использует Logback, и я попытался отключить его, используя эти инструкции . Кажется, ничего не работает.

Какие-нибудь советы?

1 Ответ

0 голосов
/ 03 июня 2019

Понял! Я прочитал пост / напыщенную речь, где парень заметил, что AWS использовал «5-летнюю банку» для регистрации в Cloudwatch / Lambda (не могу найти ее сейчас). Итак, я нашел jar Log4j2, который совместим с 1.2 (log4j-1.2-api), и он работал. Я должен был отключить Logback весной и активировать Log4j2. Ниже должен пройти весь путь.

       <dependency>
          <artifactId>spring-boot-starter</artifactId>
          <groupId>org.springframework.boot</groupId>
          <exclusions>
            <exclusion>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
          </exclusions>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
          <artifactId>aws-lambda-java-log4j2</artifactId>
          <groupId>com.amazonaws</groupId>
          <version>1.1.0</version>
        </dependency>

        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-core</artifactId>
          <version>2.11.2</version>
        </dependency>
        <dependency>
          <groupId>org.apache.logging.log4j</groupId>
          <artifactId>log4j-1.2-api</artifactId>
          <version>2.11.2</version>
        </dependency>
...

PS. Возможно, вам также придется это исправить: log4j2 ERROR StatusLogger Нераспознанный спецификатор преобразования

...