2010-01-15 40 views
2

我使用logback(使用slf4j)來進行日誌記錄,並且我有很多XML內容要記錄在文本文件和HTML文件中(使用HTMLLayout)。但是,logback只是將原始XML插入HTMLLayout的<TD>標記中,而沒有任何轉義或<前>處理。如何使XML在logback的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> 

或者更好的包裹上面帶有<前>標記的消息。 我是否需要擴展HTMLLayout來存檔?或者我的工作是爲每個日誌語句做一個StringEscapeUtils.escapeHTML(msg)(我不打算這樣做,因爲還有一個不需要轉義的文件appender)。

謝謝!

回答

4

好的。看起來我必須自己做:從logback擴展HTMLLayout並處理逃逸的事情。

http://gist.github.com/284628

編輯

當然,你必須使用新的擴展HTMLLyout然後替換logback.xml原來的一個檢查代碼的行61,其中<佈局類= .. 。>

+0

非常感謝您提供的努力成果!非常感激。輕微niggle:在org.apache.commons.lang3第61行中斷:方法escapeHtml不再存在......您可能想用escapeHtml4替換。實際上,我的需求恰恰相反:我想要「
」在日誌文件中生成一個新行。我所要做的就是擺脫'Transform.escapeTags(...)'。 – 2017-01-22 10:06:57