В разработке под 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