#java #tomcat #log4j
#java #tomcat #log4j
Вопрос:
Мы успешно запускаем три сервера CentOS, на каждом из которых одно и то же приложение, развернутое на экземпляре Tomcat (UAT, Demo и Production). Мы используем Log4j в приложении для вывода в стандартный файл CATALINA_HOME/logs/catalina.out. Это отлично работает на серверах UAT и Demo, но на производственном сервере мы получаем выходные данные в этом файле до конца процесса запуска, но ни одно из протоколирования приложения никогда не выводится.
Используя LSOF, я вижу, что стандартный вывод всегда заканчивается указанием на /dev / null . Даже при явном запуске Tomcat с добавлением к нему >> $ CATALINA_OUT 2>amp;1 amp; , он в конечном итоге указывает на /dev / null . Я вижу, что на других серверах он указывает на правильный файл catalina.out.
Я повторно развернул tomcat на сервере и напрямую скопировал конфигурационные файлы из рабочего экземпляра UAT, и теперь я чешу голову. Есть мысли?
Ответ №1:
Как вы «запускаете Tomcat с >> $ CATALINA_OUT 2>amp; 1 и добавляете к нему»?
Вы на 100% уверены, что никто не изменял bin/startup.sh
или bin/catalina.sh
не добавлял /dev/null
поведение?
Не имеет отношения к вашему основному вопросу, но я бы настоятельно рекомендовал использовать конфигурацию log4j для записи в файл ( FileAppender
) вместо входа в стандартный выход — это дает вам возможность очень легко переносить файлы на основе даты / размера / etc, Изменять местоположение и т.д. Вход в стандартный вывод не дает вам такой гибкости.
Комментарии:
1. Я взял полное имя процесса из ps, которое включает все переключатели и опции, затем явно ввел >> /opt/server/logs/catalina.out 2> amp; 1 amp; в конце — в основном, эмулируя то, что startup.sh делает. Я уверен, что сценарии запуска и catalina не редактировались, поскольку мы выполнили новую установку Tomcat на сервере на случай, если что-то подобное произошло. Я согласен с вами в правильной конфигурации ведения журнала, однако у нас все еще есть куча исключений, которые в данный момент просто перенаправляются на стандартный вывод, и их нужно зафиксировать, пока мы рефакторим ведение журнала в приложении.
2. Вы устанавливаете Tomcat из пакета, который кто-то создал, или из дистрибутива с официального сайта?
3. Это ванильная установка из Apache.
Ответ №2:
У вас есть аналогичная настройка, которая работает правильно; что нужно сделать, так это выяснить, чем отличается та, которая не работает. Выполните различие в следующих файлах:
- conf/logging.properties
- bin/startup.sh
- bin/catalina.sh
Также сравните:
- Пользователь, которому принадлежит процесс Tomcat, и группы, к которым принадлежит пользователь.
- Владение файлом и разрешения в каталоге ведения журнала.
Комментарии:
1. Привет, Майк, я уже проверил это и фактически заменил сценарии logging.properties и startup / shutdown / catalina shell на сценарии с заведомо исправного сервера. Чтобы устранить проблемы с правами пользователей, Tomcat на всех трех серверах запускается как root, причем весь каталог tomcat принадлежит root:root. Я также проверил разрешения в каталоге ведения журнала, и они совпадают на всех серверах. Странно то, что STDERR по-прежнему указывает на catalina.out.