Pergunta

Eu tenho um Appender que só quero os primeiros X caracteres (para este exemplo, diremos 5) da mensagem para exibir.

Estou usando um PatternLayout, mas não consigo obter a mensagem para truncar a mensagem corretamente.

Por exemplo, se minha mensagem de log for

A rápida Raposa marrom

Eu só quero ver :

O q

Quando eu uso isso no padrão

%.5m

eu recebo

N Fox

Como esses são os últimos 5 caracteres.

Eu olhei Pattenlayout Javadoc, mas não conseguiu encontrar nada. Sei que isso é um pouco estranho não querer ver a mensagem inteira, mas para esse appender específico faz sentido. Eu registro a mensagem inteira em um Appender diferente. Eu gostaria de evitar escrever uma aula personalizada, se possível.

Foi útil?

Solução

O truncamento é feito desde o início de uma mensagem por padrão (difere do Printf em C, que o faz desde o final).

O padrão adequado deve ser:

%.-5m

EDITAR:

Eu apenas tentei isso, e o LOG4J não gosta desse padrão. No entanto, o padrão fornecido funcionará bem no logback, se você puder fazer o interruptor. Se você não puder alternar seu provedor de log, poderá fazer uma modificação única para o LOG4J. O bit interessante de código aparece nas linhas 75-76 de org.apache.log4j.helpers.patternconverter:

if(len > max)
  sbuf.append(s.substring(len-max));

Isso deve ler:

if(len > max)
  sbuf.append(s.substring(0,max));

Você pode simplesmente fazer a modificação e recompilar o frasco para seu uso, ou pode subclasse o PatternConverter para executar o truncamento adequado. Isso também exigirá uma nova versão do PatternLayout, que contém o método CreatePatternParser, que você precisará substituir na sua subclasse para instanciar sua nova versão do PatternConverter.

Como nota lateral, esteja ciente das ramificações de licenciamento da modificação do código -fonte aberto em seu projeto específico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top