Eu tenho uma caixa Ubuntu 20.04LTS bastante baunilha, onde implantei o Tomcat9 do repositório. Fora da caixa, isso parece estar configurado para gravar seus logs em /var/log/tomcat9/ e, de fato, existem arquivos de log lá. No entanto, eles têm apenas uma pequena fração das informações que eu esperava - o restante é visível na saída systemctl status tomcat9
e está sendo gravado em /var/log/syslog.
A única coisa relevante no arquivo de unidade fornecido é.....
SyslogIdentifier=tomcat9
Enquanto a instalação do tomcat também criou /etc/rsyslog.d/tomcat9.conf contendo....
# Send Tomcat messages to catalina.out when using systemd
$template TomcatFormat,"[%timegenerated:::date-year%-%timegenerated:::date-month%-%timegenerated:::date-day% %timegenerated:::date-hour%:%timegenerated:::date-minute%:%timegenerated:::date-second%] [%syslogseverity-text%]%msg%\n"
:programname, startswith, "tomcat9" {
/var/log/tomcat9/catalina.out;TomcatFormat
stop
}
Um exemplo de saída desystemctl status tomcat9
● tomcat9.service - Apache Tomcat 9 Web Application Server
Loaded: loaded (/lib/systemd/system/tomcat9.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/tomcat9.service.d
└─override.conf
Active: active (running) since Fri 2022-04-08 13:07:39 UTC; 17min ago
Docs: https://tomcat.apache.org/tomcat-9.0-doc/index.html
Process: 1006 ExecStartPre=/usr/libexec/tomcat9/tomcat-update-policy.sh (code=exited, status=0/SUCCESS)
Main PID: 1026 (java)
Tasks: 53 (limit: 2274)
Memory: 332.9M
CGroup: /system.slice/tomcat9.service
└─1026 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Djava.util.logging.config.file=/var/lib/tomcat9/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.C>
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 ConnectionManager.openConnection(444) | opening JDBC connection
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.begin(87) | current autocommit status: true
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.begin(90) | disabling autocommit
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.commit(134) | commit
Apr 08 13:20:14 myhost.example.com tomcat9[1026]: [cfPullService] DEBUG 13:20:14 JDBCTransaction.toggleAutoCommit(227) | re-enabling autocommit
O "cfPullService" acima vem do código java implantado (que é efetivamente uma caixa preta) e pode conter outros valores em outros momentos.
E exemplo das entradas em /var/log/syslog...
Apr 8 13:20:12 myhost tomcat9[1026]: [cfPullService] INFO 13:20:12 RunSearchManagerImpl.runEarlyEngagementSearch(165) | Finished saving early engagement notices.
Apr 8 13:20:12 myhost tomcat9[1026]: [cfPullService] INFO 13:20:12 RunSearchManagerImpl.runPipelineSearch(176) | Running pipeline search
O /etc/rsyslog.d/tomcat9.conf fornecido se parece com isso:
# Send Tomcat messages to catalina.out when using systemd
$template TomcatFormat,"[%timegenerated:::date-year%-%timegenerated:::date-month%-%timegenerated:::date-day% %timegenerated:::date-hour%:%timegenerated:::date-minute%:%timegenerated:::date-second%] [%syslogseverity-text%]%msg%\n"
:programname, startswith, "tomcat9" {
/var/log/tomcat9/catalina.out;TomcatFormat
stop
}
Eu tentei criar um arquivo de substituição do systemd (e apliquei um reload do daemon) com ....
[Service]
StandardOutput=syslog
StandardError=syslog
mas isso não teve impacto no comportamento.
Como é que eu
- obtenha a saída do tomcat para ir para um arquivo em /var/log/tomcat9
- pare de enviar a saída do tomcat para /var/log/syslog
Parece que parte do problema está descrito no bug #1861881 .
Consegui obter um arquivo de log funcional ao excluir as entradas do syslog por: