代码之家  ›  专栏  ›  技术社区  ›  xhh

如何使XML在logback的htmllayout中进行转义?

  •  2
  • xhh  · 技术社区  · 16 年前

    我正在使用logback(使用slf4j)进行日志记录,并且我有许多XML内容需要同时记录在文本文件和HTML文件(使用htmllayout)中。但是,logback只是在HTML布局的<td>标记中插入原始XML,而不进行任何转义或<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>
    

    或者最好用<pre>标签包装上述邮件。 我需要扩展htmllayout来存档它吗?或者我的工作是为每个日志语句执行StringEscapeUtils.escapeHTML(msg)(我不会这样做,因为也有一个不需要进行转义的文件附加器)。

    谢谢!

    1 回复  |  直到 16 年前
        1
  •  4
  •   xhh    16 年前

    好啊。似乎我必须自己做:从logback扩展htmllayout并在那里处理转义的事情。

    请检查代码第61行 http://gist.github.com/284628

    编辑

    当然,您必须使用新的扩展htmllyout来替换logback.xml中的原始htmllyout,其中<layout class=..>