Tomcatで動作してるサーブレットにて、サーブレットからSystem.out.printlnで(catalina.outに)出力した日本語が文字化けするという動作の調査を行ったのでそのメモ。
対応としては、Tomcat起動時のLANG変数を設定すればOK。
ついでに、catalina.outの出力時刻がJSTな時刻になってないのも気になったので確認したら、こちらはJava起動時のtimezone指定で対応できる事が分かった。
起動ユーザの環境変数に設定するのも変なので、起動スクリプトに設定することで対応した。
以下、/etc/init.d/tomcatの設定値。
#!/bin/sh # chkconfig: 345 99 15 # description: tomcat INSTDIR=/usr/local/apache-tomcat-7.0.42 BINDIR=$INSTDIR/bin export JAVA_HOME=/usr/java/jdk1.6.0_45 #文字コード設定 export LANG=ja_JP.UTF-8 #Timezone設定 export JAVA_OPTS="-Duser.timezone=JST" case $1 in "start" ) $BINDIR/startup.sh > /dev/null ;; "stop" ) $BINDIR/shutdown.sh > /dev/null ;; "restart" ) $BINDIR/shutdown.sh > /dev/null $BINDIR/startup.sh > /dev/null ;; * ) $BINDIR/catalina.sh $1 ;; esac
これで解決した。