如何在HTMLLayout的logback中使XML转义?

时间:2010-01-15 02:48:56

标签: escaping logback

我正在使用logback(使用slf4j)来执行日志记录,并且我有许多XML内容要记录在文本文件和HTML文件中(使用HTMLLayout)。但是,logback只是在< TD>中插入原始XML。 HTMLLayout的标签,没有任何转义或< pre>处理

以下是我的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>

或者更好地使用&lt; pre&gt;包装上述消息标签。 我是否需要扩展HTMLLayout以存档?或者我的工作是为每个日志语句执行StringEscapeUtils.escapeHTML(msg)(我不打算这样做,因为还有一个文件追加器,不需要转义)。

谢谢!

1 个答案:

答案 0 :(得分:4)

行。似乎我必须自己做:从logback扩展HTMLLayout并处理那里的转义。

请查看http://gist.github.com/284628

代码的第61行

修改

当然,您必须使用新的扩展HTMLLyout然后替换logback.xml中的原始HTMLLyout,其中&lt; layout class = ...&gt;