使用编码包装器在日志记录输出中允许尖括号

Allow angle brackets in logging output with encode wrapper

作为网络应用程序配置的一部分,有一个 XML 文件可供系统管理员编辑。在大多数情况下,它是独立存在的,但在某些情况下,格式错误的 XML 配置可能会导致问题。

在我的 Log4J appender 配置中,我有以下 PatternLayout

<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{1} - %enc{%msg}%n"/>

和输出中包含 <$tag></$tag> 的几个字符串,以警告用户 XML 文件中特定缺失或无效的 属性。但是,日志输出显示

... &lt;$tag&gt;&lt;&#x2F;$tag&gt; tags in $XML.xml are properly defined ...

同上PatternLayout.

有没有办法转义尖括号,以便它们在日志中按预期显示?

告诉它通过%enc{}做到这一点:

https://logging.apache.org/log4j/2.x/manual/layouts.html

具体来说:

&, <, >, ", ', / Replaced with the corresponding HTML entity

如果您需要在浏览器中查看它们,请在发送至浏览器的途中对消息进行编码。日志是您的记录系统,视图(或视图的路径)应该改变它。

另一种解决方案是使用equals{pattern}{test}{substitution} 代替尖括号。我的直觉反应是不这样做;如果一个系统不能安全地查看日志,那么该系统应该负责解决这个问题——这是一个众所周知的解决方案的众所周知的问题。