2010-01-15 1 views
2

Я использую logback (с slf4j) для ведения журнала, и у меня есть много XML-контента для входа в текстовые файлы и HTML-файлы (с HTMLLayout). Тем не менее, logback просто вставляет необработанный XML в теги <TD> для HTMLLayout без каких-либо экранов или <pre>.Как заставить XML получить escape-код в HTMLLayout журнала?

Вот фрагмент моего 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> 

И следующее, что я получил:

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

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

Спасибо!

ответ

4

OK. Кажется, что я должен сделать это сам: расширьте HTMLLayout из logback и обработайте эту возможность.

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

EDIT

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

+0

Большое спасибо за то, что вы предлагаете плод своих усилий! Очень признателен. Незначительное нарушение: в org.apache.commons.lang3 строка 61 нарушена: метод escapeHtml больше не существует ... вы, вероятно, захотите заменить escapeHtml4. На самом деле, моя потребность была обратная: я хотел «
» для создания новой строки в файле журнала. Все, что мне нужно было сделать, это избавиться от 'Transform.escapeTags (...)'. –

Смежные вопросы