Rotacionamento Log
Introdução
O Quality Manager faz uso da biblioteca Apache log4j 2 para registro e auditoria das mensagens geradas pela aplicação tanto para visualização de possíveis falhas quanto para exibição de mensagens informativas. O sistema conta com umaA configuração específica de logs log4j2.xml como visto abaixo (versão 2.58 em diante):
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" monitorInterval="60">
<Appenders>
<RollingFile name="ROLLING_FILE_APPENDER"
fileName="${sys:catalina.home}/logs/md2-quality-manager.log"
filePattern="${sys:catalina.home}/logs/md2-quality-manager.%d{yyyy-MM-dd}-%i.log">
<PatternLayout charset="UTF-8"
pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} - %c{1} - %msg%n%xEx{
filters(jdk.internal.reflect, java.lang.reflect,org.jboss.weld,org.hibernate.internal,org.hibernate.hql.internal,
org.hibernate.engine.jdbc.internal, org.hibernate.loader.Loader, org.hibernate.engine.query, org.hibernate.jpa,
org.apache.catalina, org.apache.coyote, org.apache.tomcat, javax.faces, com.sun.faces,
org.omnifaces, javax.el, org.apache.el)}"/>
<Policies>
<OnStartupTriggeringPolicy/>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
<Console name="CONSOLE_APPENDER" target="SYSTEM_OUT">
<PatternLayout charset="UTF-8"
pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} - %c{1} - %msg%n%xEx{
filters(jdk.internal.reflect, java.lang.reflect,org.jboss.weld,org.hibernate.internal,org.hibernate.hql.internal,
org.hibernate.engine.jdbc.internal, org.hibernate.loader.Loader, org.hibernate.engine.query, org.hibernate.jpa,
org.apache.catalina, org.apache.coyote, org.apache.tomcat, javax.faces, com.sun.faces,
org.omnifaces, javax.el, org.apache.el)}"/>
</Console>
</Appenders>
<Loggers>
<!-- Root Logger -->
<Root level="INFO" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</Root>
<!-- Quality Manager Logger -->
<Logger name="com.md2net" level="INFO" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</Logger>
<!-- Quartz -->
<Logger name="org.quartz" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</Logger>
<!-- Flyway -->
<Logger name="org.flywaydb" level="INFO" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</Logger>
<!-- Hikari -->
<Logger name="com.zaxxer.hikari" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</Logger>
<!-- RESTEASY -->
<logger name="org.jboss.resteasy" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</logger>
<!-- WELD -->
<logger name="org.jboss.weld" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</logger>
<!-- Hibernate -->
<Logger name="org.hibernate" level="ERROR" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
</Logger>
<!-- Hibernate Query -->
<Logger name="org.hibernate.SQL" level="OFF" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
</Logger>
<!-- Hibernate Query Params -->
<Logger name="org.hibernate.orm.jdbc.bind" level="OFF" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
</Logger>
</Loggers>
</Configuration>Acima, pode-se ver que a aplicação dispõe de dois appenders que propagam o registro do log de maneiras distintas: Pela rotação de arquivoslogs do Tomcat, não vem habilitada por padrão.
Ressalta-se que as configurações e pelo console (stdout)
Rotação em arquivo:Nesta modalidade de log, a aplicação gera uma série de arquivos com prefixomd2-quality-manager-*.logque irá conter todas as mensagens registradas pelos loggers. Este arquivo é regido por políticas quanto ao seu tamanho, tempo e propagação. Este arquivo é disponibilizado pela tela deInterface e Administração para Diagnósticocomo mecanismo de diagnóstico de problemas ocorridos em execução.Console:Nesta modalidade de log, a aplicação gera o registro do log no fluxo de saída (stdout) para visualização no console.
Existem nove Loggers explicitos no arquivo (excluindo o root) para implementação dos appenders sendo eles:
Quality Manager Logger:Controla as mensagens de log geradas pela aplicação.Quartz Logger:Controla as mensagens exibidas pelo Quartz (Scheduler)Flyway Logger: Controla as mensagens exibidas pelo Flyway (Migração de Banco)Hikari Logger:Controla as mensagens exibidas pelo Hikari (Pool de Conexões)RestEasy Logger:Controla as mensagens exibidas pelo RestEasy (API rest)Weld Logger:Controla as mensagens exibidas pelo Weld (Injeção de Dependências)Hibernate Logger:Controla as mensagens exibidas pelo Hibernate (ORM)Hibernate (SQL) Logger:Controla a exibição das queries geradas pelo Hibernate (Apenas em nível DEBUG)Hibernate (Type Descriptor) Logger:Controla a exibição dosos parâmetrosdasdequeriesrotação(Apenas—emtaisnívelcomoTRACE)periodicidade,
Porretenção padrão,e critérios de exclusão — ficam a aplicação utiliza o PatternLayout para especificar o formato geral das mensagens como ilustrado abaixo. Todas as mensagens iniciam-se pelo seu nível, data/hora do evento, classe responsável, a mensagem e a stacktracecritério da exceçãoprópria (seempresa, houver)
Classificaçãodefinir quantoos aovalores nível
mais O log4j faz uso de diferentes níveisadequados de acordo com seu contexto operacional e suas políticas internas.
Abaixo é apresentado um exemplo de procedimento contendo parâmetros de rotação recomendados.
No entanto, conforme mencionado anteriormente, cabe à própria organização avaliar e definir os valores mais apropriados, levando em consideração seu contexto operacional, políticas internas e requisitos de governança.
Para fazer a criticidadeconfiguração do eventorotacionamento atravésdo log do Tomcat, os comandos abaixo deverão ser executados por um usuário com permissões administrativas no servidor.
- Localize a instalação do tomcat:
Observação: A localização da instalação do tomcat pode variar de acordo com cada organização.
Variáveis importantes:
CATALINA_HOME=/opt/tomcat
CATALINA_BASE=/opt/tomcat
Logs normalmente ficam nesse diretório:
/opt/tomcat/logs
Liste os arquivos no diretório:
ls /opt/tomcat/logs
Exemplo de arquivos que irão aparecer.
catalina.out
catalina.2026-03-09.log
localhost.2026-03-09.log
manager.2026-03-09.log
2. Configurar rotação interna do Tomcat:
Edite o arquivo:
nano /opt/tomcat/conf/logging.properties
Altere o arquivo para as configurações abaixo:
1catalina.org.apache.juli.FileHandler.level = INFO
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.maxDays = 30
2localhost.org.apache.juli.FileHandler.level = INFO
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.
2localhost.org.apache.juli.FileHandler.maxDays = 30
A alteração dessa configuração acarreta nas seguintes configurações:
- Remove logs com mais de 30 dias
- Cria logs diários
Exemplo de arquivos gerado:
catalina.2026-03-09.log
catalina.2026-03-08.log
3 - Configurar rotação para o catalina.out
Normalmente, o tamanho do arquivo catalina.out é um dos 6principais primeirosproblemas níveisnos (TRACE,ambientes.
Para DEBUG,mitigar INFO,essa WARN,situação, ERRORé recomendável realizar a configuração da rotação do arquivo catalina.out, evitando o crescimento excessivo do log.
Para isso, é necessário criar a seguinte configuração. Primeiramente, crie o arquivo abaixo:
sudo nano /etc/logrotate.d/tomcat
Copie a configuração recomendada abaixa, cole no arquivo tomcat e FATAL).salve Oso níveisarquivo. restantes
/var/lib/tomcat10/logs/catalina.out e{
OFF)daily
apenasrotate determinam15
sesize a50M
capturacompress
dosdelaycompress
logsmissingok
estánotifempty
ativadacopytruncate
oudateext
não.dateformat A-%Y%m%d
exibiçcreate 640 tomcat tomcat
}
4 - Explicação das mensagens quanto ao nível segue abaixo:configurações:
| Parâmetro | Função |
|---|---|
daily |
rotação diária |
rotate 15 |
mantém 15 arquivos |
size 50M |
rotaciona se passar de 50MB |
compress |
gzip nos logs antigos |
delaycompress |
evita compressão imediata |
copytruncate |
não precisa reiniciar Tomcat |
dateext |
adiciona data no arquivo |
create |
recria arquivo com permissões |
5 - Estrutura final de logs:
Depois de alguns dias, a estrutura de arquivos de logs ficara assim:
catalina.out
catalina.out-20260309
catalina.out-20260308.gz
catalina.out-20260307.gz
catalina.2026-03-09.log
catalina.2026-03-08.log
localhost.2026-03-09.log
ExibiçExplicação técnica:
O Tomcat utiliza o framework java.util.logging (JULI). Ele já possui suporte a rotação diária e retenção por nível
dias.
Porém,
TRACE
DEBUG
INFO
WARN
ERROR
FATAL
ALL
OFF
O Quality Manager faz uso dos níveis de alguns níveis acima para registrar os diferentes eventos ocasionados pelo sistema de acordologging. comPor aisso relaçãele não abaixo:rotaciona automaticamente.
A ferramenta logrotate resolve esse problema ao:
copiar o | comprimir arquivos antigos remover logs antigos Isso permite controle de |
|
|
|
|
|
|
| |
|
Para controlar a exibição das mensagens, o usuário pode colocar uma cópia do arquivo log4j2.xml na pasta conf do Tomcat antes da inicialização do Quality Manager. Para personalização do nível configurado no nível TRACE, por exemplo, basta alterar a propriedade level em Logger conforme abaixo:
<!-- Quality Manager Logger -->
<Logger name="com.md2net" level="TRACE" additivity="false">
<appender-ref ref="CONSOLE_APPENDER"/>
<appender-ref ref="ROLLING_FILE_APPENDER"/>
</Logger>Por padrão, o arquivo monitora as alterações no arquivo em tempo de execução a cada um minuto. Para modificar esta configuraçãespaço em 30disco segundos,sem por exemplo, altere a propriedade monitorInterval em Configuration comreiniciar o valor em segundos:Tomcat.
<Configuration status="INFO" monitorInterval="30">Fontes:
Documentação oficial:
Apache Logging Configuration
https://tomcat.apache.org/tomcat-10.0-doc/logging.html
JULI Documentation
https://tomcat.apache.org/tomcat-10.0-doc/logging.html#Using_java.util.logging_(default)
logrotate manual
https://linux.die.net/man/8/logrotate
Linux Logging Best Practices
https://www.redhat.com/en/blog/linux-logrotate


