Как заставить XML быть экранированным в HTMLLayout logback? - PullRequest
2 голосов
/ 15 января 2010

Я использую logback (с slf4j) для ведения журналов, и у меня есть много XML-контента для регистрации как в текстовых файлах, так и в HTML-файлах (с HTMLLayout). Однако logback просто вставляет необработанный XML в теги

для HTMLLayout, без экранирования или
processing.</p>

<p>Here is the snippet of my logback.xml:</p>

<pre><code><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>
</code>

И вот что я получил:

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

Что я ожидаю:

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

Или лучше обернуть вышеупомянутое сообщение тегом

.
Нужно ли расширять HTMLLayout для архивирования этого? Или это моя работа - создавать StringEscapeUtils.escapeHTML (msg) для каждого оператора журнала (я не собираюсь этого делать, поскольку также есть файловый аппендер, для которого экранирование не требуется). 

 Спасибо! 

1 Ответ

4 голосов
/ 23 января 2010

OK. Похоже, я должен сделать это сам: расширить HTMLLayout из logback и обработать экранирование там.

Пожалуйста, проверьте строку 61 кода на http://gist.github.com/284628

EDIT

Конечно, вы должны использовать новый расширенный HTMLLyout, а затем заменить оригинальный в logback.xml, где

...