Pergunta

Estou usando o logback (com slf4j) para fazer o registro e tenho muito conteúdo XML para ser registrado em arquivos de texto e HTML (com HTMLLayout).No entanto, o logback apenas insere o XML bruto nas tags <TD> do HTMLLayout, sem nenhum escape ou processamento <pre>.

Aqui está o trecho do meu logback.xml:

<appender name="ALL" class="ch.qos.logback.core.rolling.RollingFileAppender">     
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <FileNamePattern>${DIR_ALL}/%d{yyyy-MM-dd}.%i.html</FileNamePattern>
  <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
    <MaxFileSize>500KB</MaxFileSize>
  </TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<layout class="ch.qos.logback.classic.html.HTMLLayout">
  <pattern>%d{HH:mm:ss.SSS}%logger{1}%msg</pattern>
  <cssBuilder class="ch.qos.logback.classic.html.UrlCssBuilder">
    <url>${CSS_HREF}</url>
  </cssBuilder>
  <title>Logs (ALL)</title>
</layout>

E o seguinte é o que eu consegui:

<td class="Message">(DemoCall) parsing response failed. Details:
<call><action>getmessage</action></call> 
</td> 

O que estou esperando:

<td class="Message">(DemoCall) parsing response failed. Details:
&lt;call&gt;&lt;action&gt;getmessage&lt;/action&gt;&lt;/call&gt;
</td>

Ou melhor, envolva a mensagem acima com uma tag <pre>.Preciso estender o HTMLLayout para arquivar isso?Ou é meu trabalho fazer um StringEscapeUtils.escapeHTML(msg) para cada instrução de log (não vou fazer isso, pois também existe um anexador de arquivo para o qual o escape não é necessário).

Obrigado!

Foi útil?

Solução

OK.Parece que devo fazer isso sozinho:estenda o HTMLLayout do logback e lide com o escape lá.

Por favor, verifique a linha 61 do código em http://gist.github.com/284628

EDITAR

É claro que você deve usar o novo HTMLLyout estendido para substituir o original em logback.xml onde <layout class=...>

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