CodeGym /Cursos Java /Módulo 3 /Filtros de log no Log4j

Filtros de log no Log4j

Módulo 3
Nível 5 , Lição 4
Disponível

5.1 Lista de filtros

O logger permite que você configure a filtragem de mensagens de maneira muito fria. Para fazer isso, ele tem algumas dezenas de filtros com todos os tipos de parâmetros. A tabela abaixo mostra os mais populares.

Filtros Descrição
1 BurstFilter Permite controlar a frequência de mensagens por segundo para um determinado nível de registro.
2 Filtro Composto Permite definir vários filtros sequenciais.
3 DynamicThresholdFilter Permite ativar o log detalhado se determinadas informações forem encontradas no log.
4 MapFilter Permite construir uma expressão lógica complexa para o filtro a partir de vários parâmetros.
5 MarcadorFiltro Permite filtrar mensagens por tags, a tag deve ser adicionada primeiro durante o registro do evento.
6 RegexFilter Permite definir uma máscara - uma expressão regular.
7 Filtro de Dados Estruturados Permite filtrar as mensagens pela presença de determinados dados nelas.
8 ThreadContextMapFilter Permite gerenciar filtros com base nos dados retirados do contexto do thread atual.
9 ThresholdFilter Controla a criação de log com base no nível da mensagem de log.
10 TimeFilter Permite ativar e desativar filtros em horários específicos.

A seguir, falaremos sobre apenas três deles. Você pode aprender mais sobre esses filtros em seu site oficial .

5.2 Filtro de Tempo

O filtro TimeFilterpermite ligar e desligar os filtros em um determinado momento, possui 5 parâmetros:

1 começar Hora de início do registro no formatoHH:mm:ss
2 fim Hora de logoff no formatoHH:mm:ss
3 fuso horário Define o fuso horário.
4 onMatch Como registrar se a condição do filtro for verdadeira . Talvez ACCEPT, DENYou NEUTRAL. Padrão NEUTRAL.
5 onMismatch Como registrar se a condição do filtro for falsa . Talvez ACCEPT, DENYou NEUTRAL. Padrão NEUTRAL.

Vamos configurar um filtro que ativará o log às 5h e desligará às 5h30 todos os dias. Um exemplo com uma configuração de filtro completa está abaixo:


    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
    <Appenders>
        <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
        <TimeFilter start="05:00:00" end="05:30:00" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout>
            <pattern>%d %p %c{1.} [%t] %m%n</pattern>
        </PatternLayout>
        <TimeBasedTriggeringPolicy />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="error">
        <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
    </Configuration>

5.3 RegexFilter

O filtro RegexFilterpermite definir uma máscara (expressão regular) para filtrar as mensagens. Este filtro tem 4 parâmetros:

1 regex Especifica uma expressão regular - uma máscara usada para filtrar mensagens.HH:mm:ss
2 useRawMsg A máscara é aplicada na mensagem antes da formatação (true) ou após a formatação (false)
3 onMatch Como registrar se a condição do filtro for verdadeira . Talvez ACCEPT, DENYou NEUTRAL. Padrão NEUTRAL.
4 onMismatch Como registrar se a condição do filtro for falsa . Talvez ACCEPT, DENYou NEUTRAL. Padrão NEUTRAL.

Vamos configurar um filtro que permita apenas mensagens que contenham a palavra codegym. Um exemplo com uma configuração de filtro completa está abaixo:


    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
    <Appenders>
        <RollingFile name="RollingFile" fileName="logs/app.log"   filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
        <RegexFilter regex=".* codegym .*" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout>
            <pattern>%d %p %c{1.} [%t] %m%n</pattern>
        </PatternLayout>
        <TimeBasedTriggeringPolicy />
        </RollingFile>
      </Appenders>
    <Loggers>
        <Root level="error">
        <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
    </Configuration>

5.4 Filtro Limiar

O filtro ThresholdFilter permite configurar a filtragem por nível de mensagem. Possui apenas 3 parâmetros:

1 nível Define o nome do nível de log de mensagens: ERROR, DEBUG, …
2 onMatch Como registrar se a condição do filtro for verdadeira . Talvez ACCEPT, DENYou NEUTRAL. Padrão NEUTRAL.
3 onMismatch Como registrar se a condição do filtro for falsa . Talvez ACCEPT, DENYou NEUTRAL. Padrão NEUTRAL.

Vamos configurar um filtro que só permitirá mensagens de nível DEBUG. Um exemplo com uma configuração de filtro completa está abaixo:


    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn" name="MyApp" packages="">
    <Appenders>
        <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz">
           <ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout>
            <pattern>%d %p %c{1.} [%t] %m%n</pattern>
        </PatternLayout>
        <TimeBasedTriggeringPolicy />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="error">
        <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
    </Configuration>
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION