将 CR/LF 添加到日志消息以提高可读性是否是一种不好的做法

Is it bad practice to add CR/LF's to logging messages to improve readability

我们有一种方法可以用来在日志文件中记录 java 异常。该方法允许调用者传递他们希望在日志消息中显示的变量以进行调试,并使用插入空白行和制表符使消息突出并更具可读性。

但是,我看到的所有防止 Log Forging 攻击的建议都建议从日志消息中删除所有 CRLF。

在日志消息中包含 CRLF 是否被认为是不好的做法?此方法仅在内部使用,任何用户提供的信息都可以在传递给该方法之前进行清理。

一般 - 是的。

虽然乍一看这似乎是个不错的功能,但您应该考虑以下潜在的并发症:

  • 具体取决于其实现方式,如果您将多行底层日志记录框架作为多个日志记录调用,您的语句可能会与其他并发日志记录语句交错,从而导致生成的日志可读性降低
  • 各种 log-parsing 工具倾向于假定一行 == 一条语句。大多数人都知道如何解释异常堆栈跟踪(多行),但仅此而已,因此您可能会发现自己不得不深入研究 ELK stack / loggly 配置之类的东西来教它有关您花哨的多行语句的知识。
  • 不同宽度终端的复杂性(如果你打印到控制台)

我认为真正的问题是您将输出的消息与您期望将其存储在([​​=13=] 文件)中的介质紧密耦合。我建议研究结构化日志记录框架,以及更强大的 "Sinks" 结构化日志,这样您就可以在不依赖 message-formatting 技巧的情况下分析您的日志。