Tomcat 7 не производит вывод журнала в catalina.out на RHEL7


9

У меня есть сервер RHEL7 с установленным Apache Tomcat 7.0, и после недавнего обновления до RHEL7.1 вся запись в $ {catalina.base} /logs/catalina.out была остановлена. Однако я получаю журналы внутри journalctl.

Если я набираю journalctl -u tomcat, я получаю логирование. Есть ли способ для меня, чтобы получить регистрацию также в catalina.out?

cat /usr/share/tomcat/logs/catalina.out
no output

journalctl -u tomcat

Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
Aug 20 10:07:14 server.example.com server[26435]: at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
Aug 20 10:07:14 server.example.com server[26435]: at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
...

Вы убедились, что переменная "catalina.base" установлена ​​правильно?
VGe0rge

Да, catalina.base установлена ​​правильно. jinfo -sysprops 26435 | grep catalina.base catalina.base = /usr/share/tomcat
xterrez

Вы можете попытаться увидеть, что файл вообще открыт процессом tomcat. Попробуйтеstat /usr/share/tomcat/logs/catalina.out
VGe0rge

Нет, этот процесс Tomcat не использует файл catalina.out. stat /usr/share/tomcat/logs/catalina.out File: ‘/usr/share/tomcat/logs/catalina.out’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd01h/64769d Inode: 1013845 Links: 1 Access: (0660/-rw-rw----) Uid: ( 91/ tomcat) Gid: ( 91/ tomcat) Access: 2015-08-19 11:21:32.835211998 +0000 Modify: 2015-08-17 03:40:02.785809293 +0000 Change: 2015-08-17 03:40:02.785809293 +0000 Birth: -
xterrez

Хорошо, попробуйте добавить абсолютный путь в файл конфигурации tomcat и перезапустите службу. Затем повторите команды stat, чтобы увидеть результаты.
VGe0rge

Ответы:


10

Ответ Джейми верен: вы можете заставить rsyslog регистрировать события, происходящие с tomcat. Однако это не отвечает, почему tomcat 7 на rhel 7 не входит в catalina.out. Или, если это так, почему он регистрируется как в catalina.out, так и в catalina с датой (если вы не используете установку RPM).

Во-первых, в прошлом, около 7.0.42, скрипты Red Hat использовали catalina.out, потому что их скрипты имитировали поведение RHEL 6. Насколько мне известно, они использовали «разветвление» для сервиса systemd. Когда 7.0.56 был освобожден, они изменили , что полностью, делая новые сценарии и упаковщик в / USR / libexec / TOMCAT в силу кота работать в simpleрежиме вместо forked, позволяя Systemd , чтобы иметь контроль над PID и stdoutи stderrидти в журнал. catalina.$DATE.logФайл все еще есть /var/log/tomcat, но информация более ограничена, чем обычно catalina.out.

Во-вторых, давайте посмотрим на /etc/tomcat/logging.properties. Вы увидите, что он сортирует журналы определенным образом между catalina, localhost, manager, host-manager. Вы также заметите, что у него есть поддержка rsyslog, и в основном, как он «справляется» с этим. То, к чему это сводится, находится ConsoleHandlerв этом файле. Изменение тех из них изменило бы поведение входов в систему /var/log/tomcat.

journalctl -u tomcatпокажет вам все, что должен иметь catalina.out. Насколько я знаю, без изменения оболочек Red Hat в / usr / libexec / tomcat, нет верного пути к тому, чтобы все пошло только в catalina.out. Если вы измените эти сценарии и появится обновление, ваши изменения будут перезаписаны.

Если вам нужен catalina.out, используйте конфигурацию примера rsyslog Джейми. Просто знайте, что он не только заполнит это, но и журнал systemd будет иметь ту же информацию.


Хороший ответ! Это заставляет меня задуматься о несовместимых изменениях между выпусками Tomcat ...: |
Rade_303

6

Создание нового файла, /etc/rsyslog.d/tomcat.confсодержащего следующие две строки, помогло мне:

programname,contains,"server" /var/log/tomcat/catalina.out
programname,contains,"server" ~

Затем перезапустите ваш демон rsyslog:

service rsyslog restart

0

Кажется, синтаксис rsyslog изменился с более новыми версиями. Запуск 8.24.0 на RHEL 7.4, следующий синтаксис /etc/rsyslog.d/tomcat.confзаставил его работать на меня:

if ($programname contains "server") then {
    action(type="omfile" file="/var/log/tomcat/catalina.out" flushOnTXEnd="off")
    stop
}

Затем, как указывает Джейми, необходим перезапуск rsyslog:

service rsyslog restart
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.