log4jからlog4j2へアップデートする

Java

pom.xmlの修正も必要です。

log4j.xmlをlog4j2.xmlにRenameする

配置する場所はそのままでOKです。

log4j2.xmlはlog4j.xmlと互換性がないのでRenameしただけでは使えません。

そもそも書式もまるで違うのでまるっと修正する必要があります。

発生するエラー

修正しないでそのまま使おうとすると下記エラーが発生します。

ERROR StatusLogger Error parsing c:\hoge\log4j2.xml
java.io.FileNotfoundException:c:\hoge\log4j.dtd(指定されたファイルが見つかりません。)

修正内容参考リンク

Log4j-Log4j2 Appenders

Log4j-Configuration Log4j2

log4j2の設定ファイル(XML)

場合によっては必要な修正

log4j2.xmlにアップデートするときに ${catalina.base} は ${sys:catalina.base} に修正することになります。

(システムプロパティはprefixで「sys:」を付ける。OSの環境変数は「env:」を付ける。)

しかしこのままだとローカル環境で起動時にエラーになることがあります。

発生するエラー

ERROR StatusLoggerfileManager(${sys:catalina.base}/log/hoge.log)
java.io.FileNotfoundException:${sys:catalina.base}\log\hoge.log
(ファイル名、ディレクトリ名、またはボリュームラベルの構文が間違っています。)

原因は catalina.base がローカル環境に存在していないことです。

対応方法

起動時パラメータを追加することで対応できます。

STSでプロジェクト名を右クリック→RunAs→Run Configuration…→ArgumentsタブのVM argumentsに「-Dcatalina.base=C:\」を記述してApplyをクリックします。

ローカル環境に存在していないことが原因でいままではドライブ直下にログが出力されていたと思います。

したがって「C:\」を指定していますが、本来ログを出力するべき階層にここで修正した方がいいかもしれません。

日時のフォーマット

{%d{ISO8601}}

log4jのときは日付と時間が半角スペースで区切られていましたが、

log4j2になると「T」で区切られるようになります。

例)

2019-10-30T13:23:24.068

log4jと同じように半角スペースで出力をしたい場合は、下記のように指定すればOKです。

%d{yyyy-MM-dd HH:mm:ss.SSS}

ただし日時フォーマットを指定すると SimpleDateFormat が利用されます。

これは MT-safe ではないために sync されることになります。

したがってパフォーマンスに影響が出てくるためなるべく使わない方がいいと思います。

ISO8601形式はもともと「T」で区切られているので、そもそも半角スペースで区切られていたのはlog4jの不具合でlog42で修正された説、あると思います。

参考リンク

ISO8601形式

コメント

タイトルとURLをコピーしました