null

Tomcat: исправляем время сообщений в логах

В разработке под Liferay мы часто используем его в бандле с сервером Tomcat. Часто можно заметить, что время в логах сервера не совпадает с временем на машине. Это усложняет поиск ошибок в логах, когда лог большой, и просмотреть нужно конкретный временной период. Разбираемся, как это исправить.

Время на сервере (машине):

$ date
Пн 06 окт 2025 14:52:18 MSK

Время в логах Tomcat:

$ tail -f tomcat-9.0.33/logs/catalina.out
2025-10-06 11:52:41.316 INFO  [main][AutoDeployDir:205] Auto deploy scanner started

Разница ровно в 3 часа намекает на проблемы с таймзоной.

В интернете можно найти совет добавить параметр -Duser.timezone в переменную JAVA_OPTS в файле $TOMCAT_HOME/bin/catalina.sh. В действительности же нужно править в другом месте, где этот параметр уже задан, а именно в файле $TOMCAT_HOME/bin/setenv.sh

​​​​​​​Взглянем на его содержимое:

CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF-8 -Djava.locale.providers=JRE,COMPAT,CLDR -Djava.net.preferIPv4Stack=true -Duser.timezone=GMT -Xms2560m -Xmx2560m -XX:MaxNewSize=1536m -XX:MaxMetaspaceSize=768m -XX:MetaspaceSize=768m -XX:NewSize=1536m -XX:SurvivorRatio=7"

Там уже задан -Duser.timezone=GMT, который нужно исправить на одно из следующих значений, если ваш регион живет по времени МСК:

  • GMT+3
  • UTC+3
  • Europe/Moscow

Рекомендуется использовать последние два варианта.

После изменения файла нужно перезапустить Tomcat.

./bin/shutdown.sh

./bin/startup.sh

 

Вперед