Skip to main content

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 prefixo md2-quality-manager-*.log que 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 de Interface e Administração para Diagnóstico como 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âmetros dasde queriesrotação (Apenas emtais nívelcomo TRACE)
  • 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)

que

formato-geral.png

deverá

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.

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

(ALL
/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âmetroFunção
dailyrotação diária
rotate 15mantém 15 arquivos
size 50Mrotaciona se passar de 50MB
compressgzip nos logs antigos
delaycompressevita compressão imediata
copytruncatenão precisa reiniciar Tomcat
dateextadiciona data no arquivo
createrecria 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, TRACEo DEBUGarquivo INFOcatalina.out WARNé ERRORproduzido FATAL
pelo stdout

TRACE

do processo SimJava, Sim Sim Sim Sim Sim

DEBUG

o Sim Sim Sim Sim Sim

INFO

Não Não Sim Sim Sim Sim

WARN

Não Não Não Sim Sim Sim

ERROR

Não Não Não Não Sim Sim

FATAL

Não Não Não Não Não Sim

ALL

Sim Sim Sim Sim Sim Sim

OFF

Não Não Não Não Não Não

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.

truncar

A ferramenta logrotate resolve esse problema ao:

Exibiçãdetectar tamanho ou data

copiar o porlog nível
atual

Tipoo original

comprimir arquivos antigos

remover logs antigos

Isso permite controle de mensagem

TRACE

Mensagens para o contexto de depuração. Irá registrar a modificação sofrida pelas entidades no banco de dados juntamente com sua chave primária no banco de dados. O formato padrão da mensagem que será exibida é: "Uma instância da entidade [X] foi <inserida | atualizada | removida>. ID [Y]"


trace-mensagem.png

DEBUG

Mensagens para o contexto de depuração. Irá registrar as ações realizadas no sistema por usuário e por módulo (Navegação, criação ou modificação de registros e etc). O formato padrão desta mensagem para navegação é "Usuário [X] acessou o módulo [Y]" e para ações é "Usuário [X] no módulo [Y] realizou ação Z"


debug-mensagem.png

INFO

Mensagens com caráter informativo. Irá registrar as mensagens de inicialização do Quality Manager e a execução das tarefas automatizadas (notificações, envio de emails, expurgos e etc)

WARN

Mensagens para indicar avisos. Irá registrar de falhas em teste de conexão (LDAP, MDM) e informações quanto ao limite gerenciado pelo Licenciamento de Arquivos

ERROR

Mensagens para indicar erros. Irá registrar falha na execução de alguma ação que pode representar um problema com a aplicação

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