Почему стандартный вывод Tomcat всегда указывает на /dev / null?

#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.