Tomcat 7 não produzindo saída de log para catalina.out no RHEL7

9

Eu tenho um servidor RHEL7 com o Apache Tomcat 7.0 instalado e após uma atualização recente para o RHEL7.1 todo o log para $ {catalina.base} /logs/catalina.out foi interrompido. No entanto, estou recebendo os logs dentro do journalctl.

Se eu digitar journalctl -u tomcat, recebo o log. Existe alguma maneira de eu obter o log também para 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)
...
xterrez
fonte
Você verificou que a variável "catalina.base" está definida corretamente?
VGe0rge
Sim, o catalina.base está definido corretamente. jinfo -sysprops 26435 | grep catalina.base catalina.base = /usr/share/tomcat
Xterrez 20/08/2015
Você pode tentar ver se o arquivo é aberto pelo processo do tomcat. Tentestat /usr/share/tomcat/logs/catalina.out
VGe0rge
Não, esse processo do tomcat não está usando o arquivo 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 20/08/2015
Ok, tente adicionar o caminho absoluto no arquivo conf do tomcat e reinicie o serviço. Em seguida, tente novamente os comandos stat para ver os resultados.
VGe0rge

Respostas:

10

A resposta de Jamie está correta: você pode forçar o rsyslog a registrar o que está acontecendo com o tomcat. No entanto, isso não responde por que o tomcat 7 no rhel 7 não entra no catalina.out. Ou, se sim, por que ele faz logon no catalina.out e no catalina com uma data (se você não estiver usando uma instalação do RPM).

Primeiro, no passado 7.0.42, os scripts da Red Hat usavam catalina.out porque eles imitavam o comportamento do RHEL 6. Até onde eu sei, eles estavam usando "bifurcação" para o serviço systemd. Quando 7.0.56 foi lançado, eles mudaram que inteiramente por fazer novos scripts e wrappers em / usr / libexec / tomcat à força tomcat para ser executado no simplemodo em vez de forked, permitindo que systemd ter o controle do PID e stdoute stderrir à revista. Ainda existe um catalina.$DATE.logarquivo /var/log/tomcat, mas as informações são mais limitadas do normal catalina.out.

Segundo, vejamos /etc/tomcat/logging.properties. Você verá que classifica os logs de uma maneira específica entre catalina, localhost, manager, host-manager. Você também notará que ele também oferece suporte ao recurso rsyslog e basicamente como "lida" com ele. Tudo se resume a ConsoleHandleresse arquivo. Alterá-los alteraria o comportamento dos logs /var/log/tomcat.

journalctl -u tomcatmostrará tudo o que catalina.out deve ter. Até onde eu sei, sem modificar os wrappers da Red Hat em / usr / libexec / tomcat, não há uma maneira certa de fazer com que tudo aconteça apenas em catalina.out. Se você modificar esses scripts e sair uma atualização, suas alterações serão substituídas.

Se você quiser catalina.out com certeza, vá com a configuração de exemplo rsyslog do Jamie. Apenas saiba que isso não apenas preencherá isso, mas o diário systemd também terá as mesmas informações.

Sokel
fonte
Boa resposta! Isso me fez pensar em fazer alterações incompatíveis entre as versões do Tomcat ...: |
Rade_303
6

Criar um novo arquivo /etc/rsyslog.d/tomcat.confcontendo as próximas duas linhas fez o truque para mim:

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

Depois, reinicie seu daemon rsyslog:

service rsyslog restart
Jamie De Palmenaer
fonte
0

Parece que a sintaxe do rsyslog mudou com as versões mais recentes. Executando 8.24.0 no RHEL 7.4, a seguinte sintaxe /etc/rsyslog.d/tomcat.conffez com que funcionasse para mim:

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

Então, como Jaimie aponta, o reinício do rsyslog era necessário:

service rsyslog restart
Boyko
fonte