ablog

不器用で落着きのない技術者のメモ

Tomcat のログが文字化けする場合の対処法

Java Web アプリケーションを Tomcat 上で動かしていて、アプリケーション内で日本語メッセージをログに出力している場合、ロケール設定が適切でないと、日本語が文字化けする。対処するには、Tomcat の起動スクリプト内でロケールを指定してやれば良い。

#!/bin/sh
#
# chkconfig: 2345 80 25
# description: Starts and stops the Apache Tomcat

JAVA_HOME="/usr/java/default"
CATALINA_HOME="/usr/local/tomcat"
DAEMON_HOME="/usr/local/tomcat/bin"
TOMCAT_USER=tomcat

# for multi instances adapt those lines.
TMP_DIR="/var/tmp"
PID_FILE="/var/run/jsvc.pid"
CATALINA_BASE="/usr/local/tomcat"

CATALINA_OPTS="-Xms128m -Xmx6144m -XX:PermSize=128m -XX:MaxPermSize=2100m"
CLASSPATH="$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/bin/commons-daemon.jar:$CATALINA_HOME/bin/bootstrap.jar"

RETVAL=0
umask 002
LANG=ja_JP.UTF-8 # ← これでロケールを設定している

start() {
    $DAEMON_HOME/jsvc \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$TMP_DIR \
    -Dcom.sun.management.jmxremote.port=5555 \
    -Dcom.sun.management.jmxremote.ssl=false \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_HOME/logs/catalina.out \
    -errfile '&1' \
    $CATALINA_OPTS \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap
    #
    # To get a verbose JVM
    #-verbose \
    # To get a debug of jsvc.
    #-debug \
    exit $?
}

stop() {
    $DAEMON_HOME/jsvc \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap
    exit $?
}

case "$1" in
  start)
    start
    ;;

  stop)
    stop
    ;;

  *)
    echo "Usage: jsvc start/stop"
    exit 1;;
esac