AWS Lambda と Log4j2 で困った話
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-impl
と aws-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 を置く。
そうすれば slf4j
→ aws-lambda-java-log4j2
→ log4j2
で行けるよね?? って思ってたら、上記の如く、起動しないのです。
これは、自分で検索したりしてもダメっぽいな…、と思ったので、Windows11付属のAIアシスタント、Copilotに質問したのですが、要領を得ない解答で少々困ってしまって。 ハレーションを起こさなかっただけマシかもですが。
ただ、Log4j2 GitHubにあるイシュー2 へのリンクを付けてくれたのです。 あれ、これ今年の8月21日に起票されたものなんですね。
なんだ、ほぼ正解書いてあるじゃないですか。 このレス にある Click of a complete example of Maven Shade Plugin configuration 以下で記述している maven-shade-plugin
設定そのままで、フツーに動きました。3
AIも、所詮はツールと割り切って冷静に接すれば、それなりに使い道もあるよね、と言うお話でした。
-
“ERROR StatusLogger Unrecognized format specifier [d]” after i update the log4j version from 2.20.0 to 2.21.0 · apache/logging-log4j2 · Discussion #2874 ↩︎
-
Lambda Function なので
<mainClass>org.example.Main</mainClass>
の記述だけはコメントアウトで。 ↩︎