Tomcat10 + log4j2

log4jはlog4j2になって、設定が自動読み込みされるようになった。
Tomcat等Webアプリの場合の設定ファイルの置き場はマニュアルによると、
  1. サーブレットコンテクストに場所が指定されていれば、その場所を探す。
  2. 場所が指定されていなければ、WEB-INFディレクト内のlog4j2で始まるファイル名のファイルを探す。
  3. classpathとか、(Webアプリではない場合と同じ)通常の設定ファイル検索を行う。
となっている。

そこでTomcat10でWEB-INFにlog4j2.xmlを置いたのだが、無視されてしまう。 src直下にlog4j2.xmlを置くと、自動で読み込んでくれた。

なぜ、WEB-INF配下のを読まないのか、log4jのデバッグ出力を有効にしたりして、ソースを追いかけたところ、org.apache.logging.log4j.util.Constantsのコメントにこんな記述を発見。

if we think we are running in a web container, based on the boolean value of system property "log4j2.is.webapp", or (if this system property is not set) whether the javax.servlet.Servlet class is present in the classpath.

Tomcat10ではサーブレットがjavax.servlet.*からjakarta.servlet.*に変わってしまったので、log4j2はWebアプリと判別できなくなってしまったようだ。

コメント

このブログの人気の投稿

ORACLEのCHAR型とPostgreSQLのchar型は似て非なるもの

XBox360コントローラドライバのせいでコア分離セキュリティが有効にできない場合