Итак, у меня проблема с Tomcat 9 в Ubuntu 18.04.2. Tomcat 8 работал нормально, он отлично записывал трассировки стека Java в /var/log/catalina.out. Tomcat 9, к сожалению, регистрирует только запросы GET и POST с конфигурацией Ubuntu по умолчанию через apt.
Я просмотрел это, и, похоже, есть несколько тем, как исправить, самая последняя из которых: Где находится catalina.out в Tomcat 9? - но проблема в том, что мой catalina.sh выглядит совсем иначе, чем файл, показанный в этом ответе.
Части моего catalina.sh, которые похожи (но сильно отличаются), приведены ниже. По какой-то причине при установке apt кажется, что вместо того, чтобы искать запуск catalina, вместо того, чтобы найти его PID ?:
if [ -z "$CATALINA_OUT" ] ; then
CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out
fi
[...]
elif [ "$1" = "start" ] ; then
if [ ! -z "$CATALINA_PID" ]; then
if [ -f "$CATALINA_PID" ]; then
if [ -s "$CATALINA_PID" ]; then
echo "Existing PID file found during start."
if [ -r "$CATALINA_PID" ]; then
PID=`cat "$CATALINA_PID"`
ps -p $PID >/dev/null 2>&1
if [ $? -eq 0 ] ; then
echo "Tomcat appears to still be running with PID $PID. Start aborted."
echo "If the following process is not a Tomcat process, remove the PID file and try again:"
ps -f -p $PID
exit 1
else
echo "Removing/clearing stale PID file."
rm -f "$CATALINA_PID" >/dev/null 2>&1
if [ $? != 0 ]; then
if [ -w "$CATALINA_PID" ]; then
cat /dev/null > "$CATALINA_PID"
else
echo "Unable to remove or clear stale PID file. Start aborted."
exit 1
fi
fi
fi
else
echo "Unable to read PID file. Start aborted."
exit 1
fi
else
rm -f "$CATALINA_PID" >/dev/null 2>&1
if [ $? != 0 ]; then
if [ ! -w "$CATALINA_PID" ]; then
echo "Unable to remove or write to empty PID file. Start aborted."
exit 1
fi
fi
fi
fi
fi
[...]
Однако я вижу ссылку на процесс Boostrap в разделе «Безопасность». Здесь я должен добавить строку?
Примечание. Файлы catalina.out.2019-05-07.log записываются, но, опять же, содержат только ЗАПРОСЫ, а не ОШИБКИ.
if [ "$1" = "-security" ] ; then
if [ $have_tty -eq 1 ]; then
echo "Using Security Manager"
fi
shift
eval \{ $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
-classpath "\"$CLASSPATH\"" \
-Djava.security.manager \
-Djava.security.policy=="\"$CATALINA_BASE/policy/catalina.policy\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
"$CATALINA_OUT" 2>&1 "&" <-- and here?
2\>\&1 \&\& echo \$! \>\"$catalina_pid_file\" \; \} $catalina_out_command "&"
else
eval \{ $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \
-classpath "\"$CLASSPATH\"" \
-Dcatalina.base="\"$CATALINA_BASE\"" \
-Dcatalina.home="\"$CATALINA_HOME\"" \
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \
org.apache.catalina.startup.Bootstrap "$@" start \
"$CATALINA_OUT" 2>&1 "&" <-- and here?
2\>\&1 \&\& echo \$! \>\"$catalina_pid_file\" \; \} $catalina_out_command "&"
fi
В моем файле свойств ведения журнала ДЕЙСТВИТЕЛЬНО ведется журнал консоли в качестве обработчика:
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
Вот что регистрируется.
illa/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0 https://localhost:8444/asWeb/Fitness.jsp
07-May-2019 18:17:52.687 INFO [https-openssl-nio-8444-exec-5] org.restlet.engine.log.LogFilter.afterHandle 2019-05-07 18:17:52 10.0.2.2 - 10.0.2.15 8444 POST /asWeb/r/WebLinks - 200 502 22 113 https://localhost:8444 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0 https://localhost:8444/asWeb/Fitness.jsp
<<<<<< this is where it should have caught a System.out.println("DEBUG message to log"); <<<<<<<<
07-May-2019 18:17:56.318 INFO [https-openssl-nio-8444-exec-6] org.restlet.engine.log.LogFilter.afterHandle 2019-05-07 18:17:56 10.0.2.2 - 10.0.2.15 8444 POST /asWeb/r/Chart - 200 93 52 3372 https://localhost:8444 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0 https://localhost:8444/asWeb/Fitness.jsp
07-May-2019 18:17:58.471 INFO [https-openssl-nio-8444-exec-9] org.restlet.engine.log.LogFilter.afterHandle 2019-05-07 18:17:58 10.0.2.2 - 10.0.2.15 8444 POST /asWeb/r/Fitness - 200 - 67 5520 https://localhost:8444 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:66.0) Gecko/20100101 Firefox/66.0 https://localhost:8444/asWeb/Fitness.jsp
Я заметил, что обработчик журнала для вывода на консоль установлен на SystemdFormatter, а не на SimpleFormatter. Я попытался изменить обработчик журнала на простой, но это не повлияло. Я вернул его в SystemdFormatter.
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = org.apache.juli.SystemdFormatter
После дальнейшего копания я могу просмотреть исключения в статусе systemd ...
root@ass:/var/log/tomcat9# service tomcat9 status
● tomcat9.service - Apache Tomcat 9 Web Application Server
Loaded: loaded (/lib/systemd/system/tomcat9.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-05-07 19:28:36 CDT; 1h 21min ago
Docs: https://tomcat.apache.org/tomcat-9.0-doc/index.html
Process: 17539 ExecStartPre=/usr/libexec/tomcat9/tomcat-update-policy.sh (code=exited, status=0/SUCCESS)
Main PID: 17543 (java)
Tasks: 42 (limit: 4681)
CGroup: /system.slice/tomcat9.service
└─17543 /usr/lib/jvm/default-java/bin/java -Djava.util.logging.config.file=/var/lib/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.awt.headless=true -XX:+UseG1GC -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.ha
May 07 20:48:25 ass tomcat9[17543]: DEBUG Fitness All called!
May 07 20:48:25 ass tomcat9[17543]: 2019-05-07 20:48:25 10.0.2.2 - 10.0.2.15 8444 POST /asWeb/r/Fitness - 200 - 67 6696 https://localhost:8444 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv
May 07 20:48:35 ass tomcat9[17543]: 2019-05-07 20:48:35 10.0.2.2 - 10.0.2.15 8444 POST /asWeb/r/Wx - 200 - 115 2260 https://localhost:8444 Mozilla/5.0 (Android 4.4.2; Mobile; rv:66.0) G
May 07 20:49:10 ass tomcat9[17543]: DEBUG Fitness All called!
May 07 20:49:10 ass tomcat9[17543]: 2019-05-07 20:49:10 10.0.2.2 - 10.0.2.15 8444 POST /asWeb/r/Fitness - 200 - 67 3860 https://localhost:8444 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv
May 07 20:49:51 ass tomcat9[17543]: DEBUG Fitness All called!
May 07 20:49:51 ass tomcat9[17543]: 2019-05-07 20:49:51 10.0.2.2 - 10.0.2.15 8444 POST /asWeb/r/Fitness - 200 - 67 2196 https://localhost:8444 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv
May 07 20:49:55 ass tomcat9[17543]: 2019-05-07 20:49:55 10.0.2.2 - 10.0.2.15 8444 POST /asWeb/r/MediaServer - 200 - 40 722 https://localhost:8444 Mozilla/5.0 (X11; Ubuntu; Linux x86_64;
И используя это, я могу "издеваться" над catalina.out, используя
journalctl -u tomcat9 -f
Но я хочу, чтобы это было на catalina.out, без просмотра журнала - если это возможно.
Вам необходимо отредактировать файл: /lib/systemd/system/tomcat9.service
Закомментируйте строку: SyslogIdentifier=tomcat9
и добавьте эти две строки:
StandardOutput=append:/var/log/tomcat9/catalina.out
StandardError=append:/var/log/tomcat9/catalina.out