AWS Lambda と Log4j2 で困った話

TD;TR

  • maven-shade-plugin がハマりどころ
  • 結構新しい問題だった
  • AIも使いよう

何が起きたのか?

久し振りに、 AWS Lambda を触ったんです。 AWS EventBridge と組み合わせて、簡易なバッチとして動かそうと。

で、実際に Lambda Function を FatJARにしてデプロイしたら、あれ? log4j2.xml のパースに失敗して、起動できない??? ローカルでは動くのに…。

まず、 pom.xml に log4j2 の BOM を設定

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-bom</artifactId>
        <version>2.23.1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

依存関係に log4j-slf4j2-implaws-lambda-java-log4j2 を足す。

    <!-- Logging-->
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-log4j2</artifactId>
      <version>1.6.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j2-impl</artifactId>
    </dependency>

log4j2.xml は、公式にある、一番シンプルなもの1 を置く。

そうすれば slf4jaws-lambda-java-log4j2log4j2 で行けるよね?? って思ってたら、上記の如く、起動しないのです。

結局のところ

これは、自分で検索したりしてもダメっぽいな…、と思ったので、Windows11付属のAIアシスタント、Copilotに質問したのですが、要領を得ない解答で少々困ってしまって。 ハレーションを起こさなかっただけマシかもですが。

ただ、Log4j2 GitHubにあるイシュー2 へのリンクを付けてくれたのです。 あれ、これ今年の8月21日に起票されたものなんですね。

なんだ、ほぼ正解書いてあるじゃないですか。 このレス にある Click of a complete example of Maven Shade Plugin configuration 以下で記述している maven-shade-plugin 設定そのままで、フツーに動きました。3

AIも、所詮はツールと割り切って冷静に接すれば、それなりに使い道もあるよね、と言うお話でした。