2017-05-28

Tomcat 8.5: Timestamp format in logs

8 年ぶりに最新の Tomcat を追いかけたら、ログのタイムスタンプが ks になっていた。

logs/catalina.2017-05-28.log:

28-May-2017 16:06:38.023 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.15
28-May-2017 16:06:38.023 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          May 5 2017 11:03:04 UTC
28-May-2017 16:06:38.024 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.15.0
28-May-2017 16:06:38.024 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
28-May-2017 16:06:38.024 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            2.6.32-573.el6.i686
28-May-2017 16:06:38.024 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          i386

Tomcat 6 では、フォーマットはロケールによって変わり、ja_JP.UTF-8 だと 2017/05/28 というフォーマットになっていた。Tomcat 8.5 では、ロケールを何処に切り替えても変化しない。

Tomcat 8.5.5 から、Properties でカスタマイズできるようになった模様。ていうか、それまで日付が dd-MMM-yyyy に決め打ち、って流石に乱暴すぎやしないか。そして修正後、これだとタイムスタンプを出したくない場合に対応できてないんだけど。ほんともう、分かってないなあ。

まあともかく、今回は logging.properties に設定を入れれば解決する。

conf/logging.properties:

org.apache.juli.OneLineFormatter.timeFormat = yyyy-MM-dd HH:mm:ss

logs/catalina.2017-05-28.log:

2017-05-28 16:09:42.349 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.15
2017-05-28 16:09:42.355 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          May 5 2017 11:03:04 UTC
2017-05-28 16:09:42.355 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.15.0
2017-05-28 16:09:42.355 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
2017-05-28 16:09:42.355 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            2.6.32-573.el6.i686
2017-05-28 16:09:42.356 情報 [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          i386
2017-05-28 16:09:42.356 情報 [main] org.apache.catalina.startup.VersionLoggerLis
<...snip...>
2017-05-28 16:09:42.642 情報 [main] org.apache.catalina.core.StandardService.startInternal サービス [Catalina] を起動します

タイムスタンプはこれで良いとして、もう 1 つ解決したいことがある。上記では、Tomcat が出すメッセージは日本語になっているが、トラブルシュート時に不便なので、これは英語にしておきたい。最も簡単には、LANG=en_US.UTF-8 などとすれば良い。しかし、これはかなり影響が大きいのでお勧めしない。

例えば locale コマンドを叩いてみると、

# LANG=en_US.UTF-8 locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

ご覧のように、ロケールが関与するものは結構ある。日本人的には、LC_TIME (日時フォーマット)や LC_COLLATE (文字列ソート順)あたりでトラブるのがロケールあるある話。開発者の環境が ja_JP で、プロダクト環境が en_US だったりすると、リリース後に面倒が起こったりする。

よって基本ロケールは日本語にし、メッセージだけ英語にするのが無難。

export LANG=ja_JP.UTF-8
export LC_MESSAGES=en_US.UTF-8

logs/catalina.2017-05-28.log:

2017-05-28 16:11:40.304 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.5.15
2017-05-28 16:11:40.308 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          May 5 2017 11:03:04 UTC
2017-05-28 16:11:40.308 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.5.15.0
2017-05-28 16:11:40.308 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
2017-05-28 16:11:40.309 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            2.6.32-573.el6.i686
2017-05-28 16:11:40.309 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          i386
<...snip...>
2017-05-28 16:11:40.527 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]

個人的には、C.UTF-8 の方が好み。しかし RHEL 系は RHEL7 でさえも C.UTF-8 が入ってないので、en_US で我慢しておく。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。