escaping - 如何让XML在logback的HTMLLayout中转义?

标签 escaping logback

我正在使用 logback(使用 slf4j)进行日志记录,并且我有许多 XML 内容要记录在文本文件和 HTML 文件(使用 HTMLLayout)中。但是,logback 只是将原始 XML 插入到 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) (我不会这样做,因为还有一个不需要转义的文件附加程序)。

谢谢!

最佳答案

好的。看来我必须自己做:从 logback 扩展 HTMLLayout 并处理那里的转义。

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

编辑

当然,您必须使用新的扩展 HTMLLyout 来替换 logback.xml 中的原始 HTMLLyout,其中

关于escaping - 如何让XML在logback的HTMLLayout中转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2069135/

相关文章:

c++ - 行尾的双反斜杠有什么作用?

string - 我无法正确逃避什么?

java - 使用 Logback 和 SocketAppender 记录对象

java - Spring - 找不到 key 'could not find key ' logging.exception-conversion-word'

java - logback 可以在翻转时制作副本吗?

python - 无法转义字符串中的转义字符

php - 如果复制数据,再次mysql_real_escape_string?

java - 如何在java REST中使用引号

logback - 整个包层次结构的记录器级别设置?

java - 如何处理 SLF4j 的多个绑定(bind)