rsyslog 中的 #012 和 #015 是什么?如何处理?

#012 与 #015 是 rsyslog 日志中的 ASCII 控制字符转义:#012 是换行符 LF、#015 是回车符 CR。Windows 风格 CRLF 日志或消息内换行会以这种形式出现。本文给出规范化处理方法。

最佳实践
rsyslog 中的 #012 和 #015 是什么?如何处理?封面

#012 = 换行符 LF(\n),#015 = 回车符 CR(\r)——rsyslog 在输出模板里遇到消息中的控制字符时,默认用这种八进制转义形式写出,所以你会在日志文件里看到字面量 #012#015

为什么会出现

  • 日志来自 Windows 系统(行尾 CRLF);
  • 应用日志消息里本身含换行(如多行堆栈被打平);
  • 网络设备/Syslog 源的换行习惯不同。

处理方法

1. 模板中替换掉(推荐):用 RainerScript 的 replace 属性:

template(name="cleanfmt" type="list") {
  property name="msg" format="string" \
    position.from="1" position.to="2048"
  constant(value="\n")
}

# 或用 RainerScript 表达式处理
set $.clean = replace($msg, "#015#012", " ");

实际更常用的做法是在模板属性上加控制选项,把控制字符转为空格或删除。

2. 全局转义控制:rsyslog 的 $EscapeControlCharactersOnReceive off(或对应 RainerScript 参数 escapeCC="off")让 rsyslog 不再把 CR/LF 转义成 #015/#012——收到的原始字符直接写盘(注意这会真的产生换行,可能把一条日志拆成多行)。

3. 下游处理:转给 Logstash/Fluentd/观测云 DataKit 后,在解析层用替换函数统一清理。

观测云对照

观测云 DataKit 采集日志时按行切分,CR/LF 行尾自动规整;消息内的控制字符可在 Pipeline 中用 replace() 函数统一替换,规则集中管理。

常见问题(FAQ)

Q:#012#015 连着出现是什么? 就是 Windows 的 CRLF 行尾。

Q:关了转义后日志被拆行? 是的,这是双刃剑——消息内含真换行的场景建议保持转义、下游再处理。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台