Tomcat10 + log4j2
log4jはlog4j2になって、設定が自動読み込みされるようになった。
Tomcat等Webアプリの場合の設定ファイルの置き場はマニュアルによると、
Tomcat等Webアプリの場合の設定ファイルの置き場はマニュアルによると、
- サーブレットコンテクストに場所が指定されていれば、その場所を探す。
- 場所が指定されていなければ、WEB-INFディレクト内のlog4j2で始まるファイル名のファイルを探す。
- 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アプリと判別できなくなってしまったようだ。
コメント
コメントを投稿